1b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* 2b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * Copyright (C) 2008-2009 SVOX AG, Baslerstr. 30, 8048 Zuerich, Switzerland 3b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * 4b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * Licensed under the Apache License, Version 2.0 (the "License"); 5b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * you may not use this file except in compliance with the License. 6b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * You may obtain a copy of the License at 7b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * 8b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * http://www.apache.org/licenses/LICENSE-2.0 9b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * 10b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * Unless required by applicable law or agreed to in writing, software 11b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * distributed under the License is distributed on an "AS IS" BASIS, 12b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * See the License for the specific language governing permissions and 14b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * limitations under the License. 15b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen */ 16b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/** 17b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @file picosig2.c 18b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * 19b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * Signal Generation PU - Internal functions - Implementation 20b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * 21b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * Copyright (C) 2008-2009 SVOX AG, Baslerstr. 30, 8048 Zuerich, Switzerland 22b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * All rights reserved. 23b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * 24b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * History: 25b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * - 2009-04-20 -- initial version 26b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * 27b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen */ 28b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#include "picoos.h" 29b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#include "picodsp.h" 30b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#include "picosig2.h" 31b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#include "picofftsg.h" 32b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 33b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#ifdef __cplusplus 34b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenextern "C" { 35b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#endif 36b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#if 0 37b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen} 38b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#endif 39b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/*--------------------------------------------------------------------------- 40b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * INTERNAL FUNCTIONS DECLARATION 41b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen *---------------------------------------------------------------------------*/ 42b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenstatic void gen_hann2(sig_innerobj_t *sig_inObj); 43b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenstatic void get_simple_excitation(sig_innerobj_t *sig_inObj, 44b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int16 *nextPeak); 45b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenstatic void enh_wind_init(sig_innerobj_t *sig_inObj); 46b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenstatic void init_rand(sig_innerobj_t *sig_inObj); 47b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenstatic void get_trig(picoos_int32 ang, picoos_int32 *table, picoos_int32 *cs, 48b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int32 *sn); 49b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 50b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/*--------------------------------------------------------------------------- 51b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * PICO SYSTEM FUNCTIONS 52b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen *---------------------------------------------------------------------------*/ 53b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/** 54b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * allocation of DSP memory for SIG PU 55b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @param mm : memory manager 56b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @param sig_inObj : sig PU internal object of the sub-object 57b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @return PICO_OK : allocation successful 58b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @return PICO_ERR_OTHER : allocation NOT successful 59b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @callgraph 60b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @callergraph 61b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen */ 62b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenpico_status_t sigAllocate(picoos_MemoryManager mm, sig_innerobj_t *sig_inObj) 63b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen{ 64b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int16 *data_i; 65b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int32 *d32; 66b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int32 nCount; 67b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 68b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->int_vec22 = 69b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->int_vec23 = 70b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->int_vec24 = 71b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->int_vec25 = 72b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->int_vec26 = 73b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->int_vec28 = 74b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->int_vec29 = 75b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->int_vec30 = 76b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->int_vec31 = 77b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->int_vec32 = 78b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->int_vec33 = 79b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->int_vec34 = 80b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->int_vec35 = 81b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->int_vec36 = 82b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->int_vec37 = 83b07ea157c35004cf0697bf462c27c52a30c02edbChris Dearman sig_inObj->int_vec38 = 84b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->int_vec39 = 85b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->int_vec40 = NULL; 86b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 87b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->sig_vec1 = NULL; 88b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 89b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->idx_vect1 = sig_inObj->idx_vect2 = sig_inObj->idx_vect4 = NULL; 90b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->idx_vect5 = sig_inObj->idx_vect6 = sig_inObj->idx_vect7 = 91b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->idx_vect8 = sig_inObj->idx_vect9 = NULL; 92b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->ivalue17 = sig_inObj->ivalue18 = 0; 93b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 94b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /*----------------------------------------------------------------- 95b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * Memory allocations 96b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * NOTE : it would be far better to do a single allocation 97b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * and to do pointer initialization inside this routine 98b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * ------------------------------------------------------------------*/ 99b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen data_i = (picoos_int16 *) picoos_allocate(mm, sizeof(picoos_int16) 100b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * PICODSP_FFTSIZE); 101b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (NULL == data_i) { 102b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sigDeallocate(mm, sig_inObj); 103b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen return PICO_ERR_OTHER; 104b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 105b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->idx_vect1 = data_i; 106b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 107b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen data_i = (picoos_int16 *) picoos_allocate(mm, sizeof(picoos_int16) 108b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * PICODSP_HFFTSIZE_P1); 109b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (NULL == data_i) { 110b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sigDeallocate(mm, sig_inObj); 111b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen return PICO_ERR_OTHER; 112b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 113b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->idx_vect2 = data_i; 114b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 115b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen data_i = (picoos_int16 *) picoos_allocate(mm, sizeof(picoos_int16) 116b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * PICODSP_FFTSIZE); 117b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (NULL == data_i) { 118b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sigDeallocate(mm, sig_inObj); 119b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen return PICO_ERR_OTHER; 120b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 121b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->idx_vect4 = data_i; 122b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 123b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen data_i = (picoos_int16 *) picoos_allocate(mm, sizeof(picoos_int16) 124b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * PICODSP_FFTSIZE); 125b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (NULL == data_i) { 126b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sigDeallocate(mm, sig_inObj); 127b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen return PICO_ERR_OTHER; 128b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 129b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->idx_vect5 = data_i; 130b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 131b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen data_i = (picoos_int16 *) picoos_allocate(mm, sizeof(picoos_int16) 132b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * PICODSP_FFTSIZE); 133b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (NULL == data_i) { 134b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sigDeallocate(mm, sig_inObj); 135b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen return PICO_ERR_OTHER; 136b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 137b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->idx_vect6 = data_i; 138b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 139b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen data_i = (picoos_int16 *) picoos_allocate(mm, sizeof(picoos_int16) 140b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * PICODSP_HFFTSIZE_P1); 141b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (NULL == data_i) { 142b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sigDeallocate(mm, sig_inObj); 143b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen return PICO_ERR_OTHER; 144b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 145b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->idx_vect7 = data_i; 146b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 147b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen data_i = (picoos_int16 *) picoos_allocate(mm, sizeof(picoos_int16) 148b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * PICODSP_MAX_EX); 149b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (NULL == data_i) { 150b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sigDeallocate(mm, sig_inObj); 151b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen return PICO_ERR_OTHER; 152b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 153b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->idx_vect8 = data_i; 154b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 155b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen data_i = (picoos_int16 *) picoos_allocate(mm, sizeof(picoos_int16) 156b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * PICODSP_MAX_EX); 157b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (data_i == NULL) { 158b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sigDeallocate(mm, sig_inObj); 159b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen return PICO_ERR_OTHER; 160b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 161b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->idx_vect9 = data_i; 162b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 163b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32) 164b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * PICODSP_FFTSIZE); 165b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (NULL == d32) { 166b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sigDeallocate(mm, sig_inObj); 167b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen return PICO_ERR_OTHER; 168b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 169b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->int_vec22 = d32; 170b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32) 171b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * PICODSP_FFTSIZE); 172b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (NULL == d32) { 173b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sigDeallocate(mm, sig_inObj); 174b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen return PICO_ERR_OTHER; 175b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 176b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->int_vec23 = d32; 177b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32) 178b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * PICODSP_FFTSIZE); 179b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (NULL == d32) { 180b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sigDeallocate(mm, sig_inObj); 181b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen return PICO_ERR_OTHER; 182b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 183b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->int_vec24 = d32; 184b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32) 185b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * PICODSP_FFTSIZE); 186b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (NULL == d32) { 187b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sigDeallocate(mm, sig_inObj); 188b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen return PICO_ERR_OTHER; 189b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 190b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->int_vec25 = d32; 191b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32) 192b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * PICODSP_FFTSIZE * 2); 193b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (NULL == d32) { 194b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sigDeallocate(mm, sig_inObj); 195b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen return PICO_ERR_OTHER; 196b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 197b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->int_vec26 = d32; 198b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 199b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32) 200b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * PICODSP_FFTSIZE); 201b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (NULL == d32) { 202b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sigDeallocate(mm, sig_inObj); 203b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen return PICO_ERR_OTHER; 204b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 205b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->int_vec28 = d32; 206b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32) 207b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * PICODSP_FFTSIZE); 208b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (NULL == d32) { 209b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sigDeallocate(mm, sig_inObj); 210b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen return PICO_ERR_OTHER; 211b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 212b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->int_vec29 = d32; 213b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32) 214b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * PICODSP_FFTSIZE); 215b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (NULL == d32) { 216b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sigDeallocate(mm, sig_inObj); 217b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen return PICO_ERR_OTHER; 218b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 219b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->int_vec38 = d32; 220b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32) 221b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * PICODSP_FFTSIZE); 222b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (NULL == d32) { 223b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sigDeallocate(mm, sig_inObj); 224b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen return PICO_ERR_OTHER; 225b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 226b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->int_vec30 = d32; 227b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32) 228b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * PICODSP_FFTSIZE); 229b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (NULL == d32) { 230b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sigDeallocate(mm, sig_inObj); 231b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen return PICO_ERR_OTHER; 232b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 233b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->int_vec31 = d32; 234b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 235b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32) 236b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * PICODSP_FFTSIZE); 237b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (NULL == d32) { 238b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sigDeallocate(mm, sig_inObj); 239b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen return PICO_ERR_OTHER; 240b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 241b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->int_vec32 = d32; 242b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32) 243b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * PICODSP_FFTSIZE); 244b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (NULL == d32) { 245b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sigDeallocate(mm, sig_inObj); 246b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen return PICO_ERR_OTHER; 247b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 248b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->int_vec33 = d32; 249b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32) 250b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * PICODSP_N_RAND_TABLE); 251b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (NULL == d32) { 252b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sigDeallocate(mm, sig_inObj); 253b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen return PICO_ERR_OTHER; 254b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 255b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->int_vec34 = d32; 256b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32) 257b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * PICODSP_N_RAND_TABLE); 258b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (NULL == d32) { 259b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sigDeallocate(mm, sig_inObj); 260b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen return PICO_ERR_OTHER; 261b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 262b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->int_vec35 = d32; 263b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32) 264b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * PICODSP_N_RAND_TABLE); 265b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (NULL == d32) { 266b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sigDeallocate(mm, sig_inObj); 267b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen return PICO_ERR_OTHER; 268b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 269b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->int_vec36 = d32; 270b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32) 271b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * PICODSP_N_RAND_TABLE); 272b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (NULL == d32) { 273b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sigDeallocate(mm, sig_inObj); 274b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen return PICO_ERR_OTHER; 275b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 276b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->int_vec37 = d32; 277b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 278b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32) 279b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * PICODSP_HFFTSIZE_P1); 280b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (NULL == d32) { 281b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sigDeallocate(mm, sig_inObj); 282b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen return PICO_ERR_OTHER; 283b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 284b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->int_vec39 = d32; 285b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32) * (1 286b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen + PICODSP_COS_TABLE_LEN)); 287b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (NULL == d32) { 288b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sigDeallocate(mm, sig_inObj); 289b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen return PICO_ERR_OTHER; 290b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 291b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->int_vec40 = d32; 292b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 293b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (nCount = 0; nCount < CEPST_BUFF_SIZE; nCount++) { 294b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32) * (PICODSP_CEPORDER)); 295b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (NULL == d32) { 296b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sigDeallocate(mm, sig_inObj); 297b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen return PICO_ERR_OTHER; 298b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 299b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->int_vec41[nCount] = d32; 300b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 301b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 302b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (nCount = 0; nCount < PHASE_BUFF_SIZE; nCount++) { 303b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32) * (PICODSP_PHASEORDER)); 304b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (NULL == d32) { 305b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sigDeallocate(mm, sig_inObj); 306b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen return PICO_ERR_OTHER; 307b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 308b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->int_vec42[nCount] = d32; 309b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 310b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 311b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen d32 = (picoos_int32 *) picoos_allocate(mm, sizeof(picoos_int32) 312b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * PICODSP_FFTSIZE * 2); /* - fixed point */ 313b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (NULL == d32) { 314b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sigDeallocate(mm, sig_inObj); 315b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen return PICO_ERR_OTHER; 316b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 317b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->sig_vec1 = d32; 318b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 319b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen return PICO_OK; 320b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen}/*sigAllocate*/ 321b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 322b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/** 323b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * frees DSP memory for SIG PU 324b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @param mm : memory manager 325b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @param sig_inObj : sig PU internal object of the sub-object 326b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @return void 327b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @callgraph 328b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @callergraph 329b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen */ 330b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenvoid sigDeallocate(picoos_MemoryManager mm, sig_innerobj_t *sig_inObj) 331b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen{ 332b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int32 nCount; 333b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /*----------------------------------------------------------------- 334b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * Memory de-allocations 335b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * ------------------------------------------------------------------*/ 336b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (NULL != sig_inObj->idx_vect1) 337b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_deallocate(mm, (void *) &(sig_inObj->idx_vect1)); 338b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (NULL != sig_inObj->idx_vect2) 339b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_deallocate(mm, (void *) &(sig_inObj->idx_vect2)); 340b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (NULL != sig_inObj->idx_vect4) 341b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_deallocate(mm, (void *) &(sig_inObj->idx_vect4)); 342b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (NULL != sig_inObj->idx_vect5) 343b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_deallocate(mm, (void *) &(sig_inObj->idx_vect5)); 344b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (NULL != sig_inObj->idx_vect6) 345b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_deallocate(mm, (void *) &(sig_inObj->idx_vect6)); 346b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (NULL != sig_inObj->idx_vect7) 347b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_deallocate(mm, (void *) &(sig_inObj->idx_vect7)); 348b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (NULL != sig_inObj->idx_vect8) 349b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_deallocate(mm, (void *) &(sig_inObj->idx_vect8)); 350b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (NULL != sig_inObj->idx_vect9) 351b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_deallocate(mm, (void *) &(sig_inObj->idx_vect9)); 352b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 353b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (NULL != sig_inObj->int_vec22) 354b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_deallocate(mm, (void *) &(sig_inObj->int_vec22)); 355b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (NULL != sig_inObj->int_vec23) 356b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_deallocate(mm, (void *) &(sig_inObj->int_vec23)); 357b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (NULL != sig_inObj->int_vec24) 358b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_deallocate(mm, (void *) &(sig_inObj->int_vec24)); 359b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (NULL != sig_inObj->int_vec25) 360b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_deallocate(mm, (void *) &(sig_inObj->int_vec25)); 361b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (NULL != sig_inObj->int_vec26) 362b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_deallocate(mm, (void *) &(sig_inObj->int_vec26)); 363b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (NULL != sig_inObj->int_vec28) 364b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_deallocate(mm, (void *) &(sig_inObj->int_vec28)); 365b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (NULL != sig_inObj->int_vec29) 366b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_deallocate(mm, (void *) &(sig_inObj->int_vec29)); 367b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (NULL != sig_inObj->int_vec38) 368b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_deallocate(mm, (void *) &(sig_inObj->int_vec38)); 369b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (NULL != sig_inObj->int_vec30) 370b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_deallocate(mm, (void *) &(sig_inObj->int_vec30)); 371b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (NULL != sig_inObj->int_vec31) 372b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_deallocate(mm, (void *) &(sig_inObj->int_vec31)); 373b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (NULL != sig_inObj->int_vec32) 374b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_deallocate(mm, (void *) &(sig_inObj->int_vec32)); 375b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (NULL != sig_inObj->int_vec33) 376b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_deallocate(mm, (void *) &(sig_inObj->int_vec33)); 377b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (NULL != sig_inObj->int_vec34) 378b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_deallocate(mm, (void *) &(sig_inObj->int_vec34)); 379b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (NULL != sig_inObj->int_vec35) 380b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_deallocate(mm, (void *) &(sig_inObj->int_vec35)); 381b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (NULL != sig_inObj->int_vec36) 382b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_deallocate(mm, (void *) &(sig_inObj->int_vec36)); 383b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (NULL != sig_inObj->int_vec37) 384b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_deallocate(mm, (void *) &(sig_inObj->int_vec37)); 385b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (NULL != sig_inObj->int_vec39) 386b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_deallocate(mm, (void *) &(sig_inObj->int_vec39)); 387b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (NULL != sig_inObj->int_vec40) 388b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_deallocate(mm, (void *) &(sig_inObj->int_vec40)); 389b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 390b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (nCount = 0; nCount < CEPST_BUFF_SIZE; nCount++) { 391b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (NULL != sig_inObj->int_vec41[nCount]) { 392b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_deallocate(mm, (void *) &(sig_inObj->int_vec41[nCount])); 393b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 394b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 395b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 396b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (nCount = 0; nCount < PHASE_BUFF_SIZE; nCount++) { 397b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (NULL != sig_inObj->int_vec42[nCount]) { 398b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_deallocate(mm, (void *) &(sig_inObj->int_vec42[nCount])); 399b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 400b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 401b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 402b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (NULL != sig_inObj->sig_vec1) { 403b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_deallocate(mm, (void *) &(sig_inObj->sig_vec1)); 404b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 405b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen}/*sigDeAllocate*/ 406b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 407b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/** 408b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * initializes all memory neededed by DSP at instance creation time 409b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @param sig_inObj : sig PU internal object of the sub-object 410b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @return void 411b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @callgraph 412b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @callergraph 413b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen */ 414e9f72c8954f29f10cb4feb16d328a1b5c1fd7169Jean-Michel Trivivoid sigDspInitialize(sig_innerobj_t *sig_inObj, picoos_int32 resetMode) 415b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen{ 416b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int32 i, j; 417b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int32 *pnt; 418b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 419e9f72c8954f29f10cb4feb16d328a1b5c1fd7169Jean-Michel Trivi if (resetMode == PICO_RESET_SOFT) { 4207bc39b0d41efe0d8733490d54e14bc392d9f0b6dJean-Michel Trivi /*minimal initialization when receiving a soft reset */ 4217bc39b0d41efe0d8733490d54e14bc392d9f0b6dJean-Michel Trivi return; 4227bc39b0d41efe0d8733490d54e14bc392d9f0b6dJean-Michel Trivi } 423b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /*----------------------------------------------------------------- 424b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * Initialization 425b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * ------------------------------------------------------------------*/ 426b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->warp_p = PICODSP_FREQ_WARP_FACT; 427b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->VCutoff_p = PICODSP_V_CUTOFF_FREQ; /*voicing cut off frequency in Hz (will be modeled in the future)*/ 428b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->UVCutoff_p = PICODSP_UV_CUTOFF_FREQ;/*unvoiced frames only (periodize lowest components to mask bad voicing transitions)*/ 429b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->Fs_p = PICODSP_SAMP_FREQ; /*Sampling freq*/ 430b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 431b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->m1_p = PICODSP_CEPORDER; 432b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->m2_p = PICODSP_FFTSIZE; /*also initializes windowLen*/ 433b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->framesz_p = PICODSP_DISPLACE; /*1/4th of the frame size = displacement*/ 434b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->hfftsize_p = PICODSP_H_FFTSIZE; /*half of the FFT size*/ 435b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->voxbnd_p = (picoos_int32) ((picoos_single) sig_inObj->hfftsize_p 436b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen / ((picoos_single) sig_inObj->Fs_p / (picoos_single) 2) 437b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * (picoos_single) sig_inObj->VCutoff_p); 438b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->voxbnd2_p 439b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen = (picoos_int32) ((picoos_single) sig_inObj->hfftsize_p 440b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen / ((picoos_single) sig_inObj->Fs_p / (picoos_single) 2) 441b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * (picoos_single) sig_inObj->UVCutoff_p); 442b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->hop_p = sig_inObj->framesz_p; 443b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->nextPeak_p = (((int) (PICODSP_FFTSIZE)) 444b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen / ((int) PICODSP_DISPLACE) - 1) * sig_inObj->hop_p; 445b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->phId_p = 0; /*phonetic id*/ 446b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->E_p = (picoos_single) 0.0f; 447b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->F0_p = (picoos_single) 0.0f; 448b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->voiced_p = 0; 449b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->nV = sig_inObj->nU = 0; 450b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->sMod_p = (picoos_single) 1.0f; 451b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 452b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /*cleanup vectors*/ 453b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (i = 0; i < 2 * PICODSP_FFTSIZE; i++) { 454b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->sig_vec1[i] = 0; 455b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->int_vec26[i] = 0; /*wav buff cleanup */ 456b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 457b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 458b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (i = 0; i < PICODSP_FFTSIZE; i++) { 459b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->idx_vect1[i] = sig_inObj->idx_vect4[i] 460b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen = sig_inObj->idx_vect5[i] = sig_inObj->idx_vect6[i] = 0; 461b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->int_vec32[i] = sig_inObj->int_vec33[i] = 0; 462b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 463b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 464b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (i = 0; i < PICODSP_HFFTSIZE_P1; i++) { 465b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->idx_vect2[i] = (picoos_int16) 0; 466b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 467b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 468b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (i = 0; i < CEPST_BUFF_SIZE; i++) { 469b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->F0Buff[i]=0; 470b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->PhIdBuff[i]=0; 471b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->VoicingBuff[i]=0; 472b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->FuVBuff[i]=0; 473b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (NULL != sig_inObj->CepBuff[i]) { 474b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen pnt = sig_inObj->CepBuff[i]; 475b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (j = 0; j < PICODSP_CEPORDER; j++) { 476b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen pnt[j] = 0; 477b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 478b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 479b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 480b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 481b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (i = 0; i < PHASE_BUFF_SIZE; i++) { 482b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (NULL != sig_inObj->int_vec42[i]) { 483b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen pnt = sig_inObj->int_vec42[i]; 484b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (j = 0; j < PICODSP_PHASEORDER; j++) { 485b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen pnt[j] = 0; 486b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 487b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 488b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 489b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->n_available=0; 490b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /*--------------------------------------------- 491b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen Init formant enhancement window 492b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hanning window, 493b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen Post Filter Hermite's interpolator Matrix 494b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen Mel-2-Lin lookup tables 495b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen ---------------------------------------------*/ 496b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen enh_wind_init(sig_inObj); /*creates the formant enhancement window*/ 497b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen init_rand(sig_inObj); 498b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen gen_hann2(sig_inObj); 499b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen mel_2_lin_init(sig_inObj); 500b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 501b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen}/*sigDspInitialize*/ 502b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 503b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/*------------------------------------------------------------------------------- 504b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PROCESSING FUNCTIONS : CALLED WITHIN sigStep (cfr. picosig.c) 505b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen --------------------------------------------------------------------------------*/ 506b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/** 507b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * convert from mel scale to linear scale 508b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @param sig_inObj : sig PU internal object of the sub-object 509b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @param scmeanMGC : mean value of the MGC 510b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @return void 511b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @callgraph 512b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @callergraph 513b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @remarks translated from matlab code to c-code 514b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * Input 515b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * - c1 : input mfcc vector (ceporder=m1, real) 516b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * - m1 : input order 517b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * - A,B,D : lookup tables 518b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * - m2 : output order 519b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * - Xr,Xi (m2=FFT size, real) temporary arrays for FFT 520b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * - WNr,WNi (m2=FFT size, real) cos and sin precalculated tables 521b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * Output 522b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * - Xr (m2=FFT size, real) linear cepstral vector 523b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen */ 524b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenvoid mel_2_lin_lookup(sig_innerobj_t *sig_inObj, picoos_uint32 scmeanMGC) 525b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen{ 526b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /*Local vars*/ 527b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int16 nI, k; 528b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int32 delta, term1, term2; 529b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 530b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /*Local vars to be linked with sig data object*/ 531b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int32 *c1, *XXr; 532b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_single K1; 533b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int32 *D, K2, shift; 534b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int16 m1, *A, m2, m4, voiced, i; 535b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 536b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /*Link local variables with sig data object*/ 537b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c1 = sig_inObj->wcep_pI; 538b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen m1 = sig_inObj->m1_p; 539b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen m2 = PICODSP_FFTSIZE; 540b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen m4 = m2 >> 1; 541b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 542b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A = sig_inObj->A_p; 543b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D = sig_inObj->d_p; 544b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 545b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen XXr = sig_inObj->wcep_pI; 546b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen voiced = sig_inObj->voiced_p; 547b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 548b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen shift = 27 - scmeanMGC; 549b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen K2 = 1 << shift; 550b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen K1 = (picoos_single) PICODSP_START_FLOAT_NORM * K2; 551b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen XXr[0] = (picoos_int32) ((picoos_single) c1[0] * K1); 552b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (nI = 1; nI < m1; nI++) { 553b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen XXr[nI] = c1[nI] << shift; 554b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 555b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen i = sizeof(picoos_int32) * (PICODSP_FFTSIZE + 1 - m1); 556b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_mem_set(XXr + m1, 0, i); 557b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen dfct_nmf(m4, XXr); /* DFCT directly in fixed point */ 558b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 559b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /* ***************************************************************************************** 560b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen Linear frequency scale envelope through interpolation. 561b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen Two additions and one multiplication per entry. 562b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 563b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen Optimization of linear interpolation algorithm 564b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - Start from 1 and stop at PICODSP_H_FFTSIZE-1 because 0 and PICODSP_H_FFTSIZE are invariant points 565b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - B[k]=A[k]+1 except for 0 and PICODSP_H_FFTSIZE 566b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - get rid of extra -1 operation by adapting the table A[] 567b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 568b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen *******************************************************************************************/ 569b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (nI = 1; nI < PICODSP_H_FFTSIZE; nI++) { 570b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k = A[nI]; 571b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen term2 = XXr[k]; 572b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen term1 = XXr[k + 1]; 573b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen delta = term1 - term2; 574b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen XXr[nI] = term2 + ((D[nI] * delta) >> 5); /* ok because nI<=A[nI] <=B[nI] */ 575b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 576b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen}/*mel_2_lin_lookup*/ 577b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 578b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/** 579b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * calculate phase 580b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @remarks voiced phase taken from phase codebook and smoothed, 581b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @remarks unvoiced phase - random 582b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @param sig_inObj : sig PU internal object of the sub-object 583b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @return void 584b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @callgraph 585b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @callergraph 586b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen */ 587b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenvoid phase_spec2(sig_innerobj_t *sig_inObj) 588b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen{ 589b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int16 nI, iRand, firstUV; 590b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int32 *tmp1, *tmp2; 591b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int16 VOXBND_M1; 592b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int32 *spect, *ang; 593b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int16 voiced, m2; 594b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int32 *co, *so, *c, *s, voxbnd, voxbnd2; 595b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int16 i,j, k, n_comp; 596b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int16 *Pvoxbnd; 597b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int32 *phs_p2, *phs_p1, *phs_n1, *phs_n2; 598b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int32 *phs; 599b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 600b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /*Link local variables to sig data object*/ 601b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen spect = sig_inObj->wcep_pI; /* spect_p;*/ 602b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /* current spect scale : times PICODSP_FIX_SCALE1 */ 603b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen ang = sig_inObj->ang_p; 604b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen voxbnd = (picoos_int32) (sig_inObj->voxbnd_p * sig_inObj->voicing); 605b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen voxbnd2 = sig_inObj->voxbnd2_p; 606b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen voiced = sig_inObj->voiced_p; 607b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen m2 = sig_inObj->m2_p; 608b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen VOXBND_M1 = voxbnd - 1; 609b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen firstUV = 1; 610b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 611b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /*code starts here*/ 612b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (voiced == 1) { 613b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen firstUV = voxbnd; 614b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen Pvoxbnd = sig_inObj->VoxBndBuff; 615b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen n_comp = Pvoxbnd[2]; 616b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen phs_p2 = sig_inObj->PhsBuff[0]; 617b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen phs_p1 = sig_inObj->PhsBuff[1]; 618b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen phs = sig_inObj->PhsBuff[2]; 619b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen phs_n1 = sig_inObj->PhsBuff[3]; 620b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen phs_n2 = sig_inObj->PhsBuff[4]; 621b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 622b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /* find and smooth components which have full context */ 623b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j = n_comp; 624b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (i=0; i<5; i++) { 625b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (Pvoxbnd[i]<j) j = Pvoxbnd[i]; 626b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 627b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (i=0; i<j; i++) { 628b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen ang[i] = -(((phs_p2[i]+phs_p1[i]+phs[i]+phs_n1[i]+phs_n2[i])<<6) / 5); 629b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 630b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 631b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /* find and smooth components which at least one component on each side */ 632b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k = n_comp; 633b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (Pvoxbnd[2]<k) k = Pvoxbnd[2]; 634b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (Pvoxbnd[4]<k) k = Pvoxbnd[4]; 635b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (i=j; i<k; i++) { /* smooth using only two surrounding neighbours */ 636b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen ang[i] = -(((phs_p1[i]+phs[i]+phs_n1[i])<<6) / 3); 637b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 638b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 639b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /* handle rest of components - at least one side does not exist */ 640b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (i=k; i<n_comp; i++) { 641b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen ang[i] = -(phs[i]<<6); /* - simple copy without smoothing */ 642b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 643b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 644b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /*Phase unwrap - cumsum */ 645b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen tmp1 = &(ang[1]); 646b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen tmp2 = &(ang[0]); 647b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /* current ang scale : PICODSP_M_PI = PICODSP_FIX_SCALE2 */ 648b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen FAST_DEVICE(VOXBND_M1,*(tmp1++)+=*(tmp2)-PICODSP_FIX_SCALE2;*(tmp2)=(*tmp2>=0)?(*tmp2)>>PICODSP_SHIFT_FACT4:-((-(*tmp2))>>PICODSP_SHIFT_FACT4);tmp2++); 649b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen *tmp2 = (*tmp2 >= 0) ? (*tmp2) >> PICODSP_SHIFT_FACT4 : -((-(*tmp2)) 650b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen >> PICODSP_SHIFT_FACT4); /*ang[voxbnd-1]/=2;*/ 651b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 652b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 653b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /* now for the unvoiced part */ 654b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen iRand = sig_inObj->iRand; 655b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c = sig_inObj->randCosTbl + iRand; 656b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen s = sig_inObj->randSinTbl + iRand; 657b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen co = sig_inObj->outCosTbl + firstUV; 658b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen so = sig_inObj->outSinTbl + firstUV; 659b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (nI = firstUV; nI < PICODSP_HFFTSIZE_P1 - 1; nI++) { 660b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen *co++ = *c++; 661b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen *so++ = *s++; 662b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 663b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen *co = 1; 664b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen *so = 0; 665b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->iRand += (PICODSP_HFFTSIZE_P1 - firstUV); 666b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (sig_inObj->iRand > PICODSP_N_RAND_TABLE - PICODSP_HFFTSIZE_P1) 667b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->iRand = 1 + sig_inObj->iRand + PICODSP_HFFTSIZE_P1 668b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - PICODSP_N_RAND_TABLE; 669b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen}/*phase_spec2*/ 670b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 671b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/** 672b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * Prepare Envelope spectrum for inverse FFT 673b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @param sig_inObj : sig PU internal object of the sub-object 674b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @return void 675b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @remarks make phase bilateral -->> angh (FFT size, real) 676b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @remarks combine in complex input vector for IFFT F = e**(spet/2+j*ang) 677b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @remarks Compute energy -->> E (scalar, real) 678b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @callgraph 679b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @callergraph 680b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * Input 681b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * - spect (FFT size, real) 682b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * - ang (half FFT size -1, real) 683b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * - m2 fftsize 684b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * - WNr,WNi (FFT size, real) the tabulated sine and cosine values 685b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * - brev (FFT size, real) the tabulated bit reversal indexes 686b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * Output 687b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * - Fr, Fi (FFT size, complex) the envelope spectrum 688b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * - E (scalar, real) the energy 689b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen */ 690b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenvoid env_spec(sig_innerobj_t *sig_inObj) 691b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen{ 692b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 693b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int16 nI; 694b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int32 fcX, fsX, fExp, voxbnd; 695b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int32 *spect, *ang, *ctbl; 696b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int16 voiced, prev_voiced; 697b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int32 *co, *so; 698b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int32 *Fr, *Fi; 699b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_single mult; 700b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 701b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /*Link local variables to sig object*/ 702b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen spect = sig_inObj->wcep_pI; /*spect_p*/ 703b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /* current spect scale : times PICODSP_FIX_SCALE1 */ 704b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen ang = sig_inObj->ang_p; 705b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /* current spect scale : PICODSP_M_PI = PICODSP_FIX_SCALE2 */ 706b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen Fr = sig_inObj->F2r_p; 707b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen Fi = sig_inObj->F2i_p; 708b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen voiced = sig_inObj->voiced_p; 709b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen prev_voiced = sig_inObj->prevVoiced_p; 710b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen voxbnd = (picoos_int32) (sig_inObj->voxbnd_p * sig_inObj->voicing); 711b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen ctbl = sig_inObj->cos_table; 712b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /* ctbl scale : times 4096 */ 713b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen mult = PICODSP_ENVSPEC_K1 / PICODSP_FIX_SCALE1; 714b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 715b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /*remove dc from real part*/ 716b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (sig_inObj->F0_p > 120) { 717b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen spect[0] = spect[1] = 0; 718b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen spect[2] /= PICODSP_ENVSPEC_K2; 719b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } else { 720b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen spect[0] = 0; 721b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 722b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 723b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /* if using rand table, use sin and cos tables as well */ 724b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (voiced || (prev_voiced)) { 725b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /*Envelope becomes a complex exponential : F=exp(.5*spect + j*angh);*/ 726b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (nI = 0; nI < voxbnd; nI++) { 727b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen get_trig(ang[nI], ctbl, &fcX, &fsX); 728b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen fExp = (picoos_int32) EXP((double)spect[nI]*mult); 729b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen Fr[nI] = fExp * fcX; 730b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen Fi[nI] = fExp * fsX; 731b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 732b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /* ao=sig_inObj->ang_p+(picoos_int32)voxbnd; */ 733b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen co = sig_inObj->outCosTbl + voxbnd; 734b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen so = sig_inObj->outSinTbl + voxbnd; 735b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 736b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (nI = voxbnd; nI < PICODSP_HFFTSIZE_P1; nI++) { 737b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen fcX = *co++; 738b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen fsX = *so++; 739b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen fExp = (picoos_int32) EXP((double)spect[nI]*mult); 740b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen Fr[nI] = fExp * fcX; 741b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen Fi[nI] = fExp * fsX; 742b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 743b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } else { 744b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /*ao=sig_inObj->ang_p+1;*/ 745b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen co = sig_inObj->outCosTbl + 1; 746b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen so = sig_inObj->outSinTbl + 1; 747b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (nI = 1; nI < PICODSP_HFFTSIZE_P1; nI++) { 748b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen fcX = *co++; 749b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen fsX = *so++; 750b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen fExp = (picoos_int32) EXP((double)spect[nI]*mult); 751b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 752b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen Fr[nI] = fExp * fcX; 753b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen Fi[nI] = fExp * fsX; 754b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 755b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 756b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 757b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen}/*env_spec*/ 758b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 759b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/** 760b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * Calculates the impulse response of the comlpex spectrum through inverse rFFT 761b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @param sig_inObj : sig PU internal object of the sub-object 762b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @return void 763b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @remarks Imp corresponds with the real part of the FFT 764b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @callgraph 765b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @callergraph 766b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * Input 767b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * - Fr, Fi (FFT size, real & imaginary) the complex envelope spectrum (only first half of spectrum) 768b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * Output 769b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * - Imp: impulse response (length: m2) 770b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * - E (scalar, real) RMS value 771b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen */ 772b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenvoid impulse_response(sig_innerobj_t *sig_inObj) 773b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen{ 774b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /*Define local variables*/ 775b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_single f; 776b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int16 nI, nn, m2, m4, voiced; 777b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_single *E; 778b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int32 *norm_window; /* - fixed point */ 779b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int32 *fr, *Fr, *Fi, *t1, ff; /* - fixed point */ 780b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 781b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /*Link local variables with sig object*/ 782b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen m2 = sig_inObj->m2_p; 783b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen m4 = m2 >> 1; 784b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen Fr = sig_inObj->F2r_p; 785b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen Fi = sig_inObj->F2i_p; 786b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm_window = sig_inObj->norm_window_p; 787b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen E = &(sig_inObj->E_p); /*as pointer: value will be modified*/ 788b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen voiced = sig_inObj->voiced_p; 789b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen fr = sig_inObj->imp_p; 790b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 791b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /*Inverse FFT*/ 792b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (nI = 0, nn = 0; nI < m4; nI++, nn += 2) { 793b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen fr[nn] = Fr[nI]; /* - fixed point */ 794b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 795b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 796b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen fr[1] = (picoos_int32) (Fr[m4]); 797b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (nI = 1, nn = 3; nI < m4; nI++, nn += 2) { 798b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen fr[nn] = -Fi[nI]; /* - fixed point */ 799b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 800b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 801b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen rdft(m2, -1, fr); 802b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /*window, normalize and differentiate*/ 803b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen *E = norm_result(m2, fr, norm_window); 804b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 805e9f72c8954f29f10cb4feb16d328a1b5c1fd7169Jean-Michel Trivi if (*E > 0) { 806b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen f = *E * PICODSP_FIXRESP_NORM; 807e9f72c8954f29f10cb4feb16d328a1b5c1fd7169Jean-Michel Trivi } else { 808b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen f = 20; /*PICODSP_FIXRESP_NORM*/ 809e9f72c8954f29f10cb4feb16d328a1b5c1fd7169Jean-Michel Trivi } 810b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen ff = (picoos_int32) f; 811b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (ff < 1) 812b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen ff = 1; 813b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /*normalize impulse response*/ 814b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen t1 = fr;FAST_DEVICE(PICODSP_FFTSIZE,*(t1++) /= ff;); /* - fixed point */ 815b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 816b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen} /* impulse_response */ 817b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 818b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/** 819b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * time domain pitch synchronous overlap add over two frames (when no voicing transition) 820b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @param sig_inObj : sig PU internal object of the sub-object 821b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @return void 822b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @remarks Special treatment at voicing boundaries 823b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @remarks Introduced to get rid of time-domain aliasing (and additional speed up) 824b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @callgraph 825b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @callergraph 826b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen */ 827b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenvoid td_psola2(sig_innerobj_t *sig_inObj) 828b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen{ 829b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int16 nI; 830b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int16 hop, m2, *nextPeak, voiced; 831b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int32 *t1, *t2; 832b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int16 cnt; 833b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int32 *fr, *v1, ff, f; 834b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int16 a, i; 835b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int32 *window; 836b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int16 s = (picoos_int16) 1; 837b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen window = sig_inObj->window_p; 838b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 839b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /*Link local variables with sig object*/ 840b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hop = sig_inObj->hop_p; 841b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen m2 = sig_inObj->m2_p; 842b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen nextPeak = &(sig_inObj->nextPeak_p); 843b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen voiced = sig_inObj->voiced_p; 844b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen fr = sig_inObj->imp_p; 845b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /*toggle the pointers and initialize signal vector */ 846b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen v1 = sig_inObj->sig_vec1; 847b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 848b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen t1 = v1; 849b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen FAST_DEVICE(PICODSP_FFTSIZE-PICODSP_DISPLACE,*(t1++)=0;); 850b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen t1 = &(v1[PICODSP_FFTSIZE - PICODSP_DISPLACE]); 851b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen t2 = &(v1[PICODSP_FFTSIZE]); 852b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen FAST_DEVICE(PICODSP_FFTSIZE, *(t1++)=*(t2++);); 853b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen t1 = &(v1[2 * PICODSP_FFTSIZE - PICODSP_DISPLACE]);FAST_DEVICE(PICODSP_DISPLACE,*(t1++)=0;); 854b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /*calculate excitation points*/ 855b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen get_simple_excitation(sig_inObj, nextPeak); 856b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 857b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /*TD-PSOLA based on excitation vector */ 858b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if ((sig_inObj->nU == 0) && (sig_inObj->voiced_p == 1)) { 859b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /* purely voiced */ 860b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (nI = 0; nI < sig_inObj->nV; nI++) { 861b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen f = sig_inObj->EnV[nI]; 862b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a = 0; 863b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cnt = PICODSP_FFTSIZE; 864b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen ff = (f * window[sig_inObj->LocV[nI]]) >> PICODSP_SHIFT_FACT1; 865b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen t1 = &(v1[a + sig_inObj->LocV[nI]]); 866b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen t2 = &(fr[a]); 867b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (cnt > 0)FAST_DEVICE(cnt,*(t1++)+=*(t2++)*ff;); 868b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 869b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } else if ((sig_inObj->nV == 0) && (sig_inObj->voiced_p == 0)) { 870b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /* PURELY UNVOICED*/ 871b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (nI = 0; nI < sig_inObj->nU; nI++) { 872b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen f = sig_inObj->EnU[nI]; 873b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen s = -s; /*reverse order to reduce the periodicity effect*/ 874b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (s == 1) { 875b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a = 0; 876b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cnt = PICODSP_FFTSIZE; 877b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen ff = (f * window[sig_inObj->LocU[nI]]) >> PICODSP_SHIFT_FACT1; 878b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen t1 = &(v1[a + sig_inObj->LocU[nI]]); 879b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen t2 = &(fr[a]); 880b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (cnt > 0)FAST_DEVICE(cnt,*(t1++)+=*(t2++)*ff; ); 881b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } else { /*s==-1*/ 882b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a = 0; 883b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cnt = PICODSP_FFTSIZE; 884b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen ff = (f * window[sig_inObj->LocU[nI]]) >> PICODSP_SHIFT_FACT1; 885b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen t1 = &(v1[(m2 - 1 - a) + sig_inObj->LocU[nI]]); 886b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen t2 = &(fr[a]); 887b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (cnt > 0)FAST_DEVICE(cnt,*(t1--)+=*(t2++)*ff; ); 888b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 889b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 890b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } else if (sig_inObj->VoicTrans == 0) { 891b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /*voicing transition from unvoiced to voiced*/ 892b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (nI = 0; nI < sig_inObj->nV; nI++) { 893b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen f = sig_inObj->EnV[nI]; 894b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a = 0; 895b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cnt = PICODSP_FFTSIZE; 896b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen ff = (f * window[sig_inObj->LocV[nI]]) >> PICODSP_SHIFT_FACT1; 897b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen t1 = &(v1[a + sig_inObj->LocV[nI]]); 898b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen t2 = &(fr[a]); 899b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (cnt > 0)FAST_DEVICE(cnt,*(t1++)+=*(t2++)*ff;); 900b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 901b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /*add remaining stuff from unvoiced part*/ 902b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (nI = 0; nI < sig_inObj->nU; nI++) { 903b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen f = sig_inObj->EnU[nI]; 904b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen s = -s; /*reverse order to reduce the periodicity effect*/ 905b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (s == 1) { 906b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a = 0; 907b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cnt = PICODSP_FFTSIZE; 908b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen ff = (f * window[sig_inObj->LocU[nI]]) >> PICODSP_SHIFT_FACT1; 909b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen t1 = &(v1[a + sig_inObj->LocU[nI]]); 910b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen t2 = &(sig_inObj->ImpResp_p[a]); /*saved impulse response*/ 911b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (cnt > 0)FAST_DEVICE(cnt,*(t1++)+=*(t2++)*ff; ); 912b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } else { 913b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a = 0; 914b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cnt = PICODSP_FFTSIZE; 915b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen ff = (f * window[sig_inObj->LocU[nI]]) >> PICODSP_SHIFT_FACT1; 916b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen t1 = &(v1[(m2 - 1 - a) + sig_inObj->LocU[nI]]); 917b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen t2 = &(sig_inObj->ImpResp_p[a]); 918b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (cnt > 0)FAST_DEVICE(cnt,*(t1--)+=*(t2++)*ff; ); 919b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 920b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 921b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } else { 922b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /*voiced to unvoiced*/ 923b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (nI = 0; nI < sig_inObj->nU; nI++) { 924b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen f = sig_inObj->EnU[nI]; 925b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen s = -s; /*reverse order to reduce the periodicity effect*/ 926b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (s > 0) { 927b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a = 0; 928b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cnt = PICODSP_FFTSIZE; 929b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen ff = (f * window[sig_inObj->LocU[nI]]) >> PICODSP_SHIFT_FACT1; 930b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen t1 = &(v1[a + sig_inObj->LocU[nI]]); 931b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen t2 = &(fr[a]); 932b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (cnt > 0)FAST_DEVICE(cnt,*(t1++)+=*(t2++)*ff; ); 933b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } else { 934b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a = 0; 935b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cnt = PICODSP_FFTSIZE; 936b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen ff = (f * window[sig_inObj->LocU[nI]]) >> PICODSP_SHIFT_FACT1; 937b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen t1 = &(v1[(m2 - 1 - a) + sig_inObj->LocU[nI]]); 938b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen t2 = &(fr[a]); 939b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (cnt > 0)FAST_DEVICE(cnt,*(t1--)+=*(t2++)*ff; ); 940b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 941b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 942b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /*add remaining stuff from voiced part*/ 943b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (nI = 0; nI < sig_inObj->nV; nI++) { 944b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen f = sig_inObj->EnV[nI]; 945b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a = 0; 946b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cnt = PICODSP_FFTSIZE; 947b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen ff = (f * window[sig_inObj->LocV[nI]]) >> PICODSP_SHIFT_FACT1; 948b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen t1 = &(v1[a + sig_inObj->LocV[nI]]); 949b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen t2 = &(sig_inObj->ImpResp_p[a]); 950b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (cnt > 0)FAST_DEVICE(cnt,*(t1++)+=*(t2++)*ff;); 951b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 952b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 953b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 954b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen t1 = sig_inObj->sig_vec1; 955b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (i = 0; i < PICODSP_FFTSIZE; i++, t1++) { 956b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (*t1 >= 0) 957b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen *t1 >>= PICODSP_SHIFT_FACT5; 958b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen else 959b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen *t1 = -((-*t1) >> PICODSP_SHIFT_FACT5); 960b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 961b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 962b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen}/*td_psola2*/ 963b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 964b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/** 965b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * overlap + add summing of impulse responses on the final destination sample buffer 966b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @param sig_inObj : sig PU internal object of the sub-object 967b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @return void 968b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @remarks Special treatment at voicing boundaries 969b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @remarks Introduced to get rid of time-domain aliasing (and additional speed up) 970b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * Input 971b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * - wlet : the generic impulse response (FFT size, real) 972b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * - window : the windowing funcion (FFT size, real) fixed 973b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * - WavBuff : the destination buffer with past samples (FFT size*2, short) 974b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * - m2 : fftsize 975b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * Output 976b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * - WavBuff : the destination buffer with updated samples (FFT size*2, short) 977b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @callgraph 978b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @callergraph 979b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen */ 980b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenvoid overlap_add(sig_innerobj_t *sig_inObj) 981b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen{ 982b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /*Local variables*/ 983b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int32 *w, *v; 984b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 985b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /*Link local variables with sig object*/ 986b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen w = sig_inObj->WavBuff_p; 987b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen v = sig_inObj->sig_vec1; 988b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 989b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen FAST_DEVICE(PICODSP_FFTSIZE, *(w++)+=*(v++)<<PICODSP_SHIFT_FACT6;); 990b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 991b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen}/*overlap_add*/ 992b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 993b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/*------------------------------------------------------------------------------- 994b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen INITIALIZATION AND INTERNAL FUNCTIONS 995b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen --------------------------------------------------------------------------------*/ 996b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/** 997b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * Hanning window initialization 998b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @param sig_inObj : sig PU internal object of the sub-object 999b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @return PICO_OK 1000b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @callgraph 1001b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @callergraph 1002b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen */ 1003b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenstatic void gen_hann2(sig_innerobj_t *sig_inObj) 1004b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen{ 1005b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int32 *hann; 1006b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int32 *norm; 1007b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /*link local variables with sig object*/ 1008b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann = sig_inObj->window_p; 1009b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm = sig_inObj->norm_window_p; 1010b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 1011b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[0] = 80224; 1012b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[1] = 320832; 1013b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[2] = 721696; 1014b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[3] = 1282560; 1015b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[4] = 2003104; 1016b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[5] = 2882880; 1017b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[6] = 3921376; 1018b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[7] = 5117984; 1019b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[8] = 6471952; 1020b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[9] = 7982496; 1021b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[10] = 9648720; 1022b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[11] = 11469616; 1023b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[12] = 13444080; 1024b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[13] = 15570960; 1025b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[14] = 17848976; 1026b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[15] = 20276752; 1027b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[16] = 22852864; 1028b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[17] = 25575744; 1029b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[18] = 28443776; 1030b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[19] = 31455264; 1031b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[20] = 34608368; 1032b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[21] = 37901248; 1033b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[22] = 41331904; 1034b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[23] = 44898304; 1035b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[24] = 48598304; 1036b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[25] = 52429696; 1037b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[26] = 56390192; 1038b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[27] = 60477408; 1039b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[28] = 64688944; 1040b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[29] = 69022240; 1041b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[30] = 73474720; 1042b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[31] = 78043744; 1043b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[32] = 82726544; 1044b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[33] = 87520352; 1045b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[34] = 92422272; 1046b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[35] = 97429408; 1047b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[36] = 102538752; 1048b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[37] = 107747248; 1049b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[38] = 113051776; 1050b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[39] = 118449184; 1051b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[40] = 123936224; 1052b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[41] = 129509648; 1053b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[42] = 135166080; 1054b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[43] = 140902192; 1055b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[44] = 146714528; 1056b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[45] = 152599584; 1057b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[46] = 158553904; 1058b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[47] = 164573888; 1059b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[48] = 170655936; 1060b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[49] = 176796448; 1061b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[50] = 182991712; 1062b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[51] = 189238064; 1063b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[52] = 195531744; 1064b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[53] = 201868992; 1065b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[54] = 208246016; 1066b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[55] = 214659040; 1067b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[56] = 221104176; 1068b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[57] = 227577616; 1069b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[58] = 234075488; 1070b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[59] = 240593872; 1071b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[60] = 247128912; 1072b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[61] = 253676688; 1073b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[62] = 260233280; 1074b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[63] = 266794768; 1075b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[64] = 273357248; 1076b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[65] = 279916768; 1077b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[66] = 286469440; 1078b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[67] = 293011360; 1079b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[68] = 299538560; 1080b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[69] = 306047168; 1081b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[70] = 312533312; 1082b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[71] = 318993088; 1083b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[72] = 325422656; 1084b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[73] = 331818144; 1085b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[74] = 338175744; 1086b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[75] = 344491680; 1087b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[76] = 350762176; 1088b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[77] = 356983424; 1089b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[78] = 363151808; 1090b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[79] = 369263520; 1091b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[80] = 375315008; 1092b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[81] = 381302592; 1093b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[82] = 387222720; 1094b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[83] = 393071872; 1095b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[84] = 398846528; 1096b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[85] = 404543232; 1097b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[86] = 410158560; 1098b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[87] = 415689216; 1099b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[88] = 421131840; 1100b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[89] = 426483200; 1101b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[90] = 431740096; 1102b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[91] = 436899392; 1103b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[92] = 441958016; 1104b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[93] = 446912928; 1105b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[94] = 451761152; 1106b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[95] = 456499840; 1107b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[96] = 461126080; 1108b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[97] = 465637152; 1109b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[98] = 470030400; 1110b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[99] = 474303104; 1111b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[100] = 478452800; 1112b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[101] = 482476960; 1113b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[102] = 486373184; 1114b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[103] = 490139200; 1115b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[104] = 493772640; 1116b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[105] = 497271424; 1117b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[106] = 500633440; 1118b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[107] = 503856704; 1119b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[108] = 506939200; 1120b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[109] = 509879168; 1121b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[110] = 512674880; 1122b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[111] = 515324544; 1123b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[112] = 517826688; 1124b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[113] = 520179776; 1125b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[114] = 522382368; 1126b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[115] = 524433184; 1127b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[116] = 526331008; 1128b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[117] = 528074688; 1129b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[118] = 529663200; 1130b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[119] = 531095552; 1131b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[120] = 532370944; 1132b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[121] = 533488576; 1133b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[122] = 534447808; 1134b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[123] = 535248000; 1135b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[124] = 535888768; 1136b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[125] = 536369664; 1137b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[126] = 536690432; 1138b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[127] = 536850880; 1139b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[128] = 536850880; 1140b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[129] = 536690432; 1141b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[130] = 536369664; 1142b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[131] = 535888768; 1143b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[132] = 535248000; 1144b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[133] = 534447808; 1145b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[134] = 533488576; 1146b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[135] = 532370944; 1147b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[136] = 531095552; 1148b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[137] = 529663200; 1149b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[138] = 528074688; 1150b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[139] = 526331008; 1151b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[140] = 524433216; 1152b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[141] = 522382368; 1153b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[142] = 520179776; 1154b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[143] = 517826688; 1155b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[144] = 515324544; 1156b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[145] = 512674880; 1157b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[146] = 509879168; 1158b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[147] = 506939200; 1159b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[148] = 503856704; 1160b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[149] = 500633472; 1161b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[150] = 497271424; 1162b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[151] = 493772672; 1163b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[152] = 490139200; 1164b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[153] = 486373184; 1165b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[154] = 482476992; 1166b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[155] = 478452800; 1167b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[156] = 474303104; 1168b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[157] = 470030400; 1169b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[158] = 465637184; 1170b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[159] = 461126080; 1171b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[160] = 456499840; 1172b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[161] = 451761152; 1173b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[162] = 446912960; 1174b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[163] = 441958016; 1175b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[164] = 436899424; 1176b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[165] = 431740096; 1177b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[166] = 426483200; 1178b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[167] = 421131840; 1179b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[168] = 415689216; 1180b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[169] = 410158560; 1181b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[170] = 404543232; 1182b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[171] = 398846528; 1183b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[172] = 393071872; 1184b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[173] = 387222720; 1185b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[174] = 381302592; 1186b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[175] = 375315008; 1187b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[176] = 369263552; 1188b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[177] = 363151808; 1189b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[178] = 356983456; 1190b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[179] = 350762176; 1191b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[180] = 344491712; 1192b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[181] = 338175776; 1193b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[182] = 331818144; 1194b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[183] = 325422656; 1195b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[184] = 318993088; 1196b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[185] = 312533312; 1197b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[186] = 306047168; 1198b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[187] = 299538560; 1199b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[188] = 293011360; 1200b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[189] = 286469472; 1201b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[190] = 279916800; 1202b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[191] = 273357248; 1203b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[192] = 266794784; 1204b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[193] = 260233280; 1205b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[194] = 253676688; 1206b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[195] = 247128928; 1207b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[196] = 240593888; 1208b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[197] = 234075488; 1209b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[198] = 227577632; 1210b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[199] = 221104192; 1211b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[200] = 214659040; 1212b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[201] = 208246032; 1213b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[202] = 201868992; 1214b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[203] = 195531744; 1215b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[204] = 189238080; 1216b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[205] = 182991728; 1217b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[206] = 176796448; 1218b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[207] = 170655952; 1219b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[208] = 164573888; 1220b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[209] = 158553920; 1221b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[210] = 152599600; 1222b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[211] = 146714528; 1223b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[212] = 140902208; 1224b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[213] = 135166096; 1225b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[214] = 129509648; 1226b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[215] = 123936240; 1227b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[216] = 118449184; 1228b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[217] = 113051776; 1229b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[218] = 107747248; 1230b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[219] = 102538752; 1231b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[220] = 97429424; 1232b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[221] = 92422288; 1233b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[222] = 87520352; 1234b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[223] = 82726544; 1235b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[224] = 78043744; 1236b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[225] = 73474736; 1237b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[226] = 69022240; 1238b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[227] = 64688944; 1239b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[228] = 60477424; 1240b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[229] = 56390192; 1241b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[230] = 52429696; 1242b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[231] = 48598304; 1243b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[232] = 44898304; 1244b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[233] = 41331904; 1245b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[234] = 37901248; 1246b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[235] = 34608384; 1247b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[236] = 31455264; 1248b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[237] = 28443792; 1249b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[238] = 25575744; 1250b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[239] = 22852864; 1251b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[240] = 20276752; 1252b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[241] = 17848976; 1253b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[242] = 15570960; 1254b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[243] = 13444080; 1255b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[244] = 11469616; 1256b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[245] = 9648720; 1257b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[246] = 7982512; 1258b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[247] = 6471952; 1259b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[248] = 5117984; 1260b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[249] = 3921376; 1261b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[250] = 2882880; 1262b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[251] = 2003104; 1263b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[252] = 1282560; 1264b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[253] = 721696; 1265b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[254] = 320832; 1266b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen norm[255] = 80224; 1267b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[0] = 0; 1268b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[1] = 0; 1269b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[2] = 1; 1270b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[3] = 2; 1271b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[4] = 3; 1272b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[5] = 5; 1273b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[6] = 7; 1274b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[7] = 9; 1275b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[8] = 12; 1276b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[9] = 15; 1277b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[10] = 18; 1278b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[11] = 21; 1279b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[12] = 25; 1280b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[13] = 29; 1281b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[14] = 34; 1282b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[15] = 38; 1283b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[16] = 43; 1284b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[17] = 48; 1285b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[18] = 54; 1286b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[19] = 59; 1287b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[20] = 66; 1288b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[21] = 72; 1289b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[22] = 78; 1290b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[23] = 85; 1291b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[24] = 92; 1292b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[25] = 100; 1293b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[26] = 107; 1294b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[27] = 115; 1295b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[28] = 123; 1296b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[29] = 131; 1297b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[30] = 140; 1298b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[31] = 148; 1299b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[32] = 157; 1300b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[33] = 166; 1301b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[34] = 176; 1302b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[35] = 185; 1303b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[36] = 195; 1304b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[37] = 205; 1305b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[38] = 215; 1306b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[39] = 225; 1307b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[40] = 236; 1308b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[41] = 247; 1309b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[42] = 257; 1310b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[43] = 268; 1311b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[44] = 279; 1312b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[45] = 291; 1313b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[46] = 302; 1314b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[47] = 313; 1315b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[48] = 325; 1316b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[49] = 337; 1317b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[50] = 349; 1318b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[51] = 360; 1319b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[52] = 372; 1320b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[53] = 385; 1321b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[54] = 397; 1322b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[55] = 409; 1323b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[56] = 421; 1324b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[57] = 434; 1325b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[58] = 446; 1326b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[59] = 458; 1327b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[60] = 471; 1328b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[61] = 483; 1329b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[62] = 496; 1330b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[63] = 508; 1331b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[64] = 521; 1332b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[65] = 533; 1333b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[66] = 546; 1334b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[67] = 558; 1335b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[68] = 571; 1336b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[69] = 583; 1337b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[70] = 596; 1338b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[71] = 608; 1339b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[72] = 620; 1340b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[73] = 632; 1341b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[74] = 645; 1342b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[75] = 657; 1343b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[76] = 669; 1344b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[77] = 680; 1345b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[78] = 692; 1346b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[79] = 704; 1347b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[80] = 715; 1348b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[81] = 727; 1349b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[82] = 738; 1350b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[83] = 749; 1351b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[84] = 760; 1352b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[85] = 771; 1353b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[86] = 782; 1354b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[87] = 792; 1355b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[88] = 803; 1356b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[89] = 813; 1357b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[90] = 823; 1358b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[91] = 833; 1359b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[92] = 842; 1360b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[93] = 852; 1361b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[94] = 861; 1362b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[95] = 870; 1363b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[96] = 879; 1364b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[97] = 888; 1365b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[98] = 896; 1366b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[99] = 904; 1367b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[100] = 912; 1368b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[101] = 920; 1369b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[102] = 927; 1370b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[103] = 934; 1371b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[104] = 941; 1372b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[105] = 948; 1373b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[106] = 954; 1374b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[107] = 961; 1375b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[108] = 966; 1376b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[109] = 972; 1377b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[110] = 977; 1378b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[111] = 982; 1379b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[112] = 987; 1380b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[113] = 992; 1381b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[114] = 996; 1382b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[115] = 1000; 1383b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[116] = 1003; 1384b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[117] = 1007; 1385b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[118] = 1010; 1386b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[119] = 1012; 1387b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[120] = 1015; 1388b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[121] = 1017; 1389b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[122] = 1019; 1390b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[123] = 1020; 1391b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[124] = 1022; 1392b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[125] = 1023; 1393b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[126] = 1023; 1394b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[127] = 1023; 1395b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[128] = 1023; 1396b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[129] = 1023; 1397b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[130] = 1023; 1398b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[131] = 1022; 1399b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[132] = 1020; 1400b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[133] = 1019; 1401b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[134] = 1017; 1402b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[135] = 1015; 1403b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[136] = 1012; 1404b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[137] = 1010; 1405b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[138] = 1007; 1406b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[139] = 1003; 1407b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[140] = 1000; 1408b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[141] = 996; 1409b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[142] = 992; 1410b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[143] = 987; 1411b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[144] = 982; 1412b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[145] = 977; 1413b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[146] = 972; 1414b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[147] = 966; 1415b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[148] = 961; 1416b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[149] = 954; 1417b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[150] = 948; 1418b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[151] = 941; 1419b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[152] = 934; 1420b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[153] = 927; 1421b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[154] = 920; 1422b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[155] = 912; 1423b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[156] = 904; 1424b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[157] = 896; 1425b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[158] = 888; 1426b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[159] = 879; 1427b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[160] = 870; 1428b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[161] = 861; 1429b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[162] = 852; 1430b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[163] = 842; 1431b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[164] = 833; 1432b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[165] = 823; 1433b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[166] = 813; 1434b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[167] = 803; 1435b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[168] = 792; 1436b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[169] = 782; 1437b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[170] = 771; 1438b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[171] = 760; 1439b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[172] = 749; 1440b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[173] = 738; 1441b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[174] = 727; 1442b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[175] = 715; 1443b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[176] = 704; 1444b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[177] = 692; 1445b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[178] = 680; 1446b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[179] = 669; 1447b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[180] = 657; 1448b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[181] = 645; 1449b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[182] = 632; 1450b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[183] = 620; 1451b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[184] = 608; 1452b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[185] = 596; 1453b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[186] = 583; 1454b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[187] = 571; 1455b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[188] = 558; 1456b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[189] = 546; 1457b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[190] = 533; 1458b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[191] = 521; 1459b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[192] = 508; 1460b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[193] = 496; 1461b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[194] = 483; 1462b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[195] = 471; 1463b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[196] = 458; 1464b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[197] = 446; 1465b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[198] = 434; 1466b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[199] = 421; 1467b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[200] = 409; 1468b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[201] = 397; 1469b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[202] = 385; 1470b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[203] = 372; 1471b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[204] = 360; 1472b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[205] = 349; 1473b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[206] = 337; 1474b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[207] = 325; 1475b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[208] = 313; 1476b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[209] = 302; 1477b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[210] = 291; 1478b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[211] = 279; 1479b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[212] = 268; 1480b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[213] = 257; 1481b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[214] = 247; 1482b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[215] = 236; 1483b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[216] = 225; 1484b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[217] = 215; 1485b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[218] = 205; 1486b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[219] = 195; 1487b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[220] = 185; 1488b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[221] = 176; 1489b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[222] = 166; 1490b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[223] = 157; 1491b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[224] = 148; 1492b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[225] = 140; 1493b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[226] = 131; 1494b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[227] = 123; 1495b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[228] = 115; 1496b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[229] = 107; 1497b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[230] = 100; 1498b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[231] = 92; 1499b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[232] = 85; 1500b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[233] = 78; 1501b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[234] = 72; 1502b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[235] = 66; 1503b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[236] = 59; 1504b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[237] = 54; 1505b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[238] = 48; 1506b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[239] = 43; 1507b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[240] = 38; 1508b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[241] = 34; 1509b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[242] = 29; 1510b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[243] = 25; 1511b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[244] = 21; 1512b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[245] = 18; 1513b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[246] = 15; 1514b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[247] = 12; 1515b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[248] = 9; 1516b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[249] = 7; 1517b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[250] = 5; 1518b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[251] = 3; 1519b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[252] = 2; 1520b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[253] = 1; 1521b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[254] = 0; 1522b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hann[255] = 0; 1523b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 1524b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen} /* gen_hann2 */ 1525b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 1526b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/** 1527b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * Creates the non uniform enhancement window (bilinearly mapped hannning window) 1528b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * in order to reduce the formant enhancement in the high spectrum 1529b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @param mm : memory manager 1530b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @param sig_inObj : sig PU internal object of the sub-object 1531b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @return void 1532b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @callgraph 1533b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @callergraph 1534b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @remarks the outgput is based on the matlab script below\n 1535b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen matlab script 1536b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen ------------- 1537b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen function makeEnhWind(alpha) 1538b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen N=129; % =HFFTSIZEE_P1 1539b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen s=(bilinmap(alpha,N)); 1540b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen h=[hann(N)']; 1541b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x=(1:N)/N; 1542b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen W=interp1(x,h,s); W(1)=0; 1543b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 1544b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen fid=fopen('enhwind.txt','wt'); 1545b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen fprintf(fid,'picoos_int16 enh_wind_init(sig_innerobj_t *sig_inObj) {\n'); 1546b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for i=1:N, 1547b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen fprintf(fid,[' sig_inObj->enhwind[' int2str(i) '] = (picoos_single)' num2str(W(i),'%0.7g') ';\n']); 1548b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen end; 1549b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen fprintf(fid,' return PICO_OK;\n'); 1550b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen fprintf(fid,' }; \n'); 1551b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen fclose(fid); 1552b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen %figure(1); plot(x*8,W); 1553b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen */ 1554b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenstatic void enh_wind_init(sig_innerobj_t *sig_inObj) 1555b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen{ 1556b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /* picoos_int16 i; */ 1557b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int32 *c; 1558b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 1559b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c = sig_inObj->cos_table; 1560b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 1561b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[0] = 4096; 1562b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[1] = 4095; 1563b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[2] = 4095; 1564b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[3] = 4095; 1565b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[4] = 4095; 1566b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[5] = 4095; 1567b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[6] = 4095; 1568b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[7] = 4095; 1569b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[8] = 4094; 1570b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[9] = 4094; 1571b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[10] = 4094; 1572b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[11] = 4093; 1573b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[12] = 4093; 1574b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[13] = 4092; 1575b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[14] = 4092; 1576b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[15] = 4091; 1577b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[16] = 4091; 1578b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[17] = 4090; 1579b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[18] = 4089; 1580b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[19] = 4089; 1581b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[20] = 4088; 1582b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[21] = 4087; 1583b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[22] = 4086; 1584b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[23] = 4085; 1585b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[24] = 4084; 1586b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[25] = 4083; 1587b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[26] = 4082; 1588b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[27] = 4081; 1589b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[28] = 4080; 1590b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[29] = 4079; 1591b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[30] = 4078; 1592b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[31] = 4077; 1593b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[32] = 4076; 1594b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[33] = 4075; 1595b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[34] = 4073; 1596b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[35] = 4072; 1597b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[36] = 4071; 1598b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[37] = 4069; 1599b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[38] = 4068; 1600b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[39] = 4066; 1601b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[40] = 4065; 1602b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[41] = 4063; 1603b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[42] = 4062; 1604b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[43] = 4060; 1605b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[44] = 4058; 1606b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[45] = 4057; 1607b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[46] = 4055; 1608b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[47] = 4053; 1609b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[48] = 4051; 1610b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[49] = 4049; 1611b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[50] = 4047; 1612b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[51] = 4045; 1613b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[52] = 4043; 1614b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[53] = 4041; 1615b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[54] = 4039; 1616b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[55] = 4037; 1617b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[56] = 4035; 1618b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[57] = 4033; 1619b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[58] = 4031; 1620b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[59] = 4029; 1621b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[60] = 4026; 1622b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[61] = 4024; 1623b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[62] = 4022; 1624b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[63] = 4019; 1625b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[64] = 4017; 1626b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[65] = 4014; 1627b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[66] = 4012; 1628b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[67] = 4009; 1629b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[68] = 4007; 1630b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[69] = 4004; 1631b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[70] = 4001; 1632b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[71] = 3999; 1633b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[72] = 3996; 1634b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[73] = 3993; 1635b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[74] = 3990; 1636b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[75] = 3988; 1637b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[76] = 3985; 1638b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[77] = 3982; 1639b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[78] = 3979; 1640b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[79] = 3976; 1641b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[80] = 3973; 1642b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[81] = 3970; 1643b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[82] = 3967; 1644b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[83] = 3963; 1645b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[84] = 3960; 1646b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[85] = 3957; 1647b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[86] = 3954; 1648b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[87] = 3950; 1649b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[88] = 3947; 1650b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[89] = 3944; 1651b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[90] = 3940; 1652b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[91] = 3937; 1653b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[92] = 3933; 1654b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[93] = 3930; 1655b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[94] = 3926; 1656b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[95] = 3923; 1657b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[96] = 3919; 1658b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[97] = 3915; 1659b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[98] = 3912; 1660b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[99] = 3908; 1661b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[100] = 3904; 1662b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[101] = 3900; 1663b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[102] = 3897; 1664b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[103] = 3893; 1665b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[104] = 3889; 1666b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[105] = 3885; 1667b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[106] = 3881; 1668b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[107] = 3877; 1669b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[108] = 3873; 1670b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[109] = 3869; 1671b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[110] = 3864; 1672b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[111] = 3860; 1673b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[112] = 3856; 1674b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[113] = 3852; 1675b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[114] = 3848; 1676b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[115] = 3843; 1677b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[116] = 3839; 1678b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[117] = 3834; 1679b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[118] = 3830; 1680b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[119] = 3826; 1681b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[120] = 3821; 1682b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[121] = 3816; 1683b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[122] = 3812; 1684b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[123] = 3807; 1685b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[124] = 3803; 1686b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[125] = 3798; 1687b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[126] = 3793; 1688b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[127] = 3789; 1689b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[128] = 3784; 1690b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[129] = 3779; 1691b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[130] = 3774; 1692b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[131] = 3769; 1693b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[132] = 3764; 1694b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[133] = 3759; 1695b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[134] = 3754; 1696b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[135] = 3749; 1697b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[136] = 3744; 1698b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[137] = 3739; 1699b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[138] = 3734; 1700b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[139] = 3729; 1701b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[140] = 3723; 1702b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[141] = 3718; 1703b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[142] = 3713; 1704b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[143] = 3708; 1705b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[144] = 3702; 1706b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[145] = 3697; 1707b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[146] = 3691; 1708b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[147] = 3686; 1709b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[148] = 3680; 1710b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[149] = 3675; 1711b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[150] = 3669; 1712b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[151] = 3664; 1713b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[152] = 3658; 1714b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[153] = 3652; 1715b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[154] = 3647; 1716b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[155] = 3641; 1717b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[156] = 3635; 1718b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[157] = 3629; 1719b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[158] = 3624; 1720b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[159] = 3618; 1721b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[160] = 3612; 1722b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[161] = 3606; 1723b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[162] = 3600; 1724b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[163] = 3594; 1725b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[164] = 3588; 1726b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[165] = 3582; 1727b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[166] = 3576; 1728b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[167] = 3570; 1729b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[168] = 3563; 1730b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[169] = 3557; 1731b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[170] = 3551; 1732b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[171] = 3545; 1733b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[172] = 3538; 1734b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[173] = 3532; 1735b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[174] = 3526; 1736b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[175] = 3519; 1737b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[176] = 3513; 1738b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[177] = 3506; 1739b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[178] = 3500; 1740b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[179] = 3493; 1741b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[180] = 3487; 1742b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[181] = 3480; 1743b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[182] = 3473; 1744b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[183] = 3467; 1745b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[184] = 3460; 1746b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[185] = 3453; 1747b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[186] = 3447; 1748b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[187] = 3440; 1749b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[188] = 3433; 1750b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[189] = 3426; 1751b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[190] = 3419; 1752b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[191] = 3412; 1753b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[192] = 3405; 1754b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[193] = 3398; 1755b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[194] = 3391; 1756b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[195] = 3384; 1757b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[196] = 3377; 1758b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[197] = 3370; 1759b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[198] = 3363; 1760b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[199] = 3356; 1761b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[200] = 3348; 1762b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[201] = 3341; 1763b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[202] = 3334; 1764b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[203] = 3326; 1765b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[204] = 3319; 1766b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[205] = 3312; 1767b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[206] = 3304; 1768b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[207] = 3297; 1769b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[208] = 3289; 1770b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[209] = 3282; 1771b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[210] = 3274; 1772b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[211] = 3267; 1773b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[212] = 3259; 1774b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[213] = 3252; 1775b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[214] = 3244; 1776b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[215] = 3236; 1777b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[216] = 3229; 1778b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[217] = 3221; 1779b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[218] = 3213; 1780b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[219] = 3205; 1781b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[220] = 3197; 1782b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[221] = 3190; 1783b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[222] = 3182; 1784b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[223] = 3174; 1785b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[224] = 3166; 1786b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[225] = 3158; 1787b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[226] = 3150; 1788b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[227] = 3142; 1789b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[228] = 3134; 1790b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[229] = 3126; 1791b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[230] = 3117; 1792b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[231] = 3109; 1793b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[232] = 3101; 1794b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[233] = 3093; 1795b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[234] = 3085; 1796b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[235] = 3076; 1797b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[236] = 3068; 1798b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[237] = 3060; 1799b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[238] = 3051; 1800b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[239] = 3043; 1801b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[240] = 3034; 1802b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[241] = 3026; 1803b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[242] = 3018; 1804b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[243] = 3009; 1805b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[244] = 3000; 1806b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[245] = 2992; 1807b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[246] = 2983; 1808b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[247] = 2975; 1809b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[248] = 2966; 1810b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[249] = 2957; 1811b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[250] = 2949; 1812b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[251] = 2940; 1813b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[252] = 2931; 1814b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[253] = 2922; 1815b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[254] = 2914; 1816b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[255] = 2905; 1817b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[256] = 2896; 1818b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[257] = 2887; 1819b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[258] = 2878; 1820b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[259] = 2869; 1821b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[260] = 2860; 1822b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[261] = 2851; 1823b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[262] = 2842; 1824b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[263] = 2833; 1825b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[264] = 2824; 1826b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[265] = 2815; 1827b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[266] = 2806; 1828b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[267] = 2796; 1829b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[268] = 2787; 1830b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[269] = 2778; 1831b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[270] = 2769; 1832b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[271] = 2760; 1833b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[272] = 2750; 1834b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[273] = 2741; 1835b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[274] = 2732; 1836b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[275] = 2722; 1837b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[276] = 2713; 1838b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[277] = 2703; 1839b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[278] = 2694; 1840b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[279] = 2684; 1841b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[280] = 2675; 1842b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[281] = 2665; 1843b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[282] = 2656; 1844b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[283] = 2646; 1845b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[284] = 2637; 1846b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[285] = 2627; 1847b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[286] = 2617; 1848b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[287] = 2608; 1849b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[288] = 2598; 1850b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[289] = 2588; 1851b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[290] = 2578; 1852b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[291] = 2569; 1853b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[292] = 2559; 1854b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[293] = 2549; 1855b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[294] = 2539; 1856b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[295] = 2529; 1857b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[296] = 2519; 1858b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[297] = 2510; 1859b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[298] = 2500; 1860b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[299] = 2490; 1861b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[300] = 2480; 1862b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[301] = 2470; 1863b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[302] = 2460; 1864b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[303] = 2450; 1865b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[304] = 2439; 1866b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[305] = 2429; 1867b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[306] = 2419; 1868b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[307] = 2409; 1869b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[308] = 2399; 1870b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[309] = 2389; 1871b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[310] = 2379; 1872b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[311] = 2368; 1873b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[312] = 2358; 1874b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[313] = 2348; 1875b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[314] = 2337; 1876b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[315] = 2327; 1877b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[316] = 2317; 1878b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[317] = 2306; 1879b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[318] = 2296; 1880b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[319] = 2286; 1881b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[320] = 2275; 1882b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[321] = 2265; 1883b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[322] = 2254; 1884b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[323] = 2244; 1885b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[324] = 2233; 1886b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[325] = 2223; 1887b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[326] = 2212; 1888b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[327] = 2201; 1889b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[328] = 2191; 1890b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[329] = 2180; 1891b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[330] = 2170; 1892b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[331] = 2159; 1893b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[332] = 2148; 1894b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[333] = 2138; 1895b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[334] = 2127; 1896b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[335] = 2116; 1897b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[336] = 2105; 1898b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[337] = 2094; 1899b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[338] = 2084; 1900b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[339] = 2073; 1901b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[340] = 2062; 1902b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[341] = 2051; 1903b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[342] = 2040; 1904b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[343] = 2029; 1905b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[344] = 2018; 1906b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[345] = 2007; 1907b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[346] = 1997; 1908b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[347] = 1986; 1909b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[348] = 1975; 1910b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[349] = 1964; 1911b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[350] = 1952; 1912b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[351] = 1941; 1913b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[352] = 1930; 1914b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[353] = 1919; 1915b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[354] = 1908; 1916b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[355] = 1897; 1917b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[356] = 1886; 1918b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[357] = 1875; 1919b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[358] = 1864; 1920b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[359] = 1852; 1921b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[360] = 1841; 1922b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[361] = 1830; 1923b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[362] = 1819; 1924b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[363] = 1807; 1925b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[364] = 1796; 1926b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[365] = 1785; 1927b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[366] = 1773; 1928b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[367] = 1762; 1929b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[368] = 1751; 1930b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[369] = 1739; 1931b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[370] = 1728; 1932b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[371] = 1717; 1933b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[372] = 1705; 1934b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[373] = 1694; 1935b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[374] = 1682; 1936b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[375] = 1671; 1937b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[376] = 1659; 1938b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[377] = 1648; 1939b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[378] = 1636; 1940b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[379] = 1625; 1941b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[380] = 1613; 1942b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[381] = 1602; 1943b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[382] = 1590; 1944b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[383] = 1579; 1945b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[384] = 1567; 1946b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[385] = 1555; 1947b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[386] = 1544; 1948b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[387] = 1532; 1949b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[388] = 1520; 1950b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[389] = 1509; 1951b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[390] = 1497; 1952b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[391] = 1485; 1953b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[392] = 1474; 1954b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[393] = 1462; 1955b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[394] = 1450; 1956b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[395] = 1438; 1957b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[396] = 1427; 1958b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[397] = 1415; 1959b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[398] = 1403; 1960b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[399] = 1391; 1961b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[400] = 1379; 1962b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[401] = 1368; 1963b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[402] = 1356; 1964b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[403] = 1344; 1965b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[404] = 1332; 1966b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[405] = 1320; 1967b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[406] = 1308; 1968b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[407] = 1296; 1969b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[408] = 1284; 1970b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[409] = 1272; 1971b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[410] = 1260; 1972b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[411] = 1248; 1973b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[412] = 1237; 1974b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[413] = 1225; 1975b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[414] = 1213; 1976b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[415] = 1201; 1977b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[416] = 1189; 1978b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[417] = 1176; 1979b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[418] = 1164; 1980b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[419] = 1152; 1981b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[420] = 1140; 1982b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[421] = 1128; 1983b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[422] = 1116; 1984b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[423] = 1104; 1985b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[424] = 1092; 1986b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[425] = 1080; 1987b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[426] = 1068; 1988b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[427] = 1056; 1989b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[428] = 1043; 1990b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[429] = 1031; 1991b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[430] = 1019; 1992b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[431] = 1007; 1993b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[432] = 995; 1994b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[433] = 983; 1995b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[434] = 970; 1996b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[435] = 958; 1997b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[436] = 946; 1998b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[437] = 934; 1999b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[438] = 921; 2000b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[439] = 909; 2001b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[440] = 897; 2002b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[441] = 885; 2003b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[442] = 872; 2004b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[443] = 860; 2005b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[444] = 848; 2006b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[445] = 836; 2007b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[446] = 823; 2008b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[447] = 811; 2009b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[448] = 799; 2010b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[449] = 786; 2011b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[450] = 774; 2012b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[451] = 762; 2013b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[452] = 749; 2014b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[453] = 737; 2015b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[454] = 725; 2016b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[455] = 712; 2017b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[456] = 700; 2018b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[457] = 687; 2019b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[458] = 675; 2020b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[459] = 663; 2021b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[460] = 650; 2022b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[461] = 638; 2023b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[462] = 625; 2024b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[463] = 613; 2025b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[464] = 601; 2026b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[465] = 588; 2027b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[466] = 576; 2028b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[467] = 563; 2029b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[468] = 551; 2030b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[469] = 538; 2031b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[470] = 526; 2032b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[471] = 513; 2033b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[472] = 501; 2034b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[473] = 488; 2035b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[474] = 476; 2036b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[475] = 463; 2037b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[476] = 451; 2038b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[477] = 438; 2039b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[478] = 426; 2040b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[479] = 413; 2041b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[480] = 401; 2042b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[481] = 388; 2043b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[482] = 376; 2044b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[483] = 363; 2045b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[484] = 351; 2046b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[485] = 338; 2047b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[486] = 326; 2048b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[487] = 313; 2049b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[488] = 301; 2050b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[489] = 288; 2051b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[490] = 276; 2052b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[491] = 263; 2053b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[492] = 251; 2054b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[493] = 238; 2055b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[494] = 226; 2056b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[495] = 213; 2057b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[496] = 200; 2058b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[497] = 188; 2059b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[498] = 175; 2060b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[499] = 163; 2061b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[500] = 150; 2062b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[501] = 138; 2063b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[502] = 125; 2064b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[503] = 113; 2065b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[504] = 100; 2066b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[505] = 87; 2067b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[506] = 75; 2068b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[507] = 62; 2069b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[508] = 50; 2070b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[509] = 37; 2071b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[510] = 25; 2072b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[511] = 12; 2073b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen c[512] = 0; 2074b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen} /*enh_wind_init*/ 2075b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 2076b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/** 2077b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * Initializes a useful large array of random numbers 2078b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @param sig_inObj : sig PU internal object of the sub-object 2079b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @return void 2080b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @callgraph 2081b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @callergraph 2082b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen */ 2083b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenstatic void init_rand(sig_innerobj_t *sig_inObj) 2084b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen{ 2085b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int32 *q = sig_inObj->int_vec34; 2086b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int32 *r = sig_inObj->int_vec35; 2087b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 2088b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->iRand = 0; 2089b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 2090b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[0] = -2198; 2091b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[0] = 3455; 2092b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[1] = 3226; 2093b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[1] = -2522; 2094b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[2] = -845; 2095b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[2] = 4007; 2096b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[3] = -1227; 2097b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[3] = 3907; 2098b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[4] = -3480; 2099b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[4] = 2158; 2100b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[5] = -1325; 2101b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[5] = -3875; 2102b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[6] = 2089; 2103b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[6] = -3522; 2104b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[7] = -468; 2105b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[7] = 4069; 2106b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[8] = 711; 2107b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[8] = -4033; 2108b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[9] = 3862; 2109b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[9] = 1362; 2110b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[10] = 4054; 2111b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[10] = -579; 2112b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[11] = 2825; 2113b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[11] = 2965; 2114b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[12] = 2704; 2115b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[12] = -3076; 2116b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[13] = 4081; 2117b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[13] = 344; 2118b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[14] = -3912; 2119b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[14] = 1211; 2120b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[15] = -3541; 2121b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[15] = 2058; 2122b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[16] = 2694; 2123b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[16] = 3084; 2124b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[17] = 835; 2125b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[17] = 4009; 2126b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[18] = -2578; 2127b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[18] = -3182; 2128b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[19] = 3205; 2129b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[19] = 2550; 2130b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[20] = -4074; 2131b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[20] = -418; 2132b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[21] = -183; 2133b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[21] = -4091; 2134b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[22] = -2665; 2135b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[22] = -3110; 2136b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[23] = -1367; 2137b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[23] = 3860; 2138b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[24] = -2266; 2139b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[24] = -3411; 2140b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[25] = 3327; 2141b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[25] = -2387; 2142b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[26] = -2807; 2143b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[26] = -2982; 2144b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[27] = -3175; 2145b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[27] = -2587; 2146b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[28] = -4095; 2147b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[28] = 27; 2148b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[29] = -811; 2149b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[29] = -4014; 2150b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[30] = 4082; 2151b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[30] = 332; 2152b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[31] = -2175; 2153b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[31] = 3470; 2154b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[32] = 3112; 2155b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[32] = 2662; 2156b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[33] = 1168; 2157b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[33] = -3925; 2158b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[34] = 2659; 2159b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[34] = 3115; 2160b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[35] = 4048; 2161b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[35] = 622; 2162b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[36] = 4092; 2163b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[36] = -165; 2164b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[37] = -4036; 2165b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[37] = 697; 2166b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[38] = 1081; 2167b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[38] = -3950; 2168b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[39] = -548; 2169b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[39] = 4059; 2170b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[40] = 4038; 2171b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[40] = 685; 2172b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[41] = -511; 2173b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[41] = 4063; 2174b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[42] = 3317; 2175b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[42] = -2402; 2176b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[43] = -3180; 2177b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[43] = 2580; 2178b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[44] = 851; 2179b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[44] = -4006; 2180b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[45] = 2458; 2181b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[45] = -3276; 2182b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[46] = -1453; 2183b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[46] = 3829; 2184b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[47] = -3577; 2185b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[47] = 1995; 2186b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[48] = -3708; 2187b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[48] = -1738; 2188b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[49] = -3890; 2189b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[49] = 1282; 2190b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[50] = 4041; 2191b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[50] = 666; 2192b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[51] = -3511; 2193b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[51] = -2108; 2194b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[52] = -1454; 2195b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[52] = -3828; 2196b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[53] = 2124; 2197b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[53] = 3502; 2198b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[54] = -3159; 2199b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[54] = 2606; 2200b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[55] = 2384; 2201b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[55] = -3330; 2202b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[56] = -3767; 2203b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[56] = -1607; 2204b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[57] = -4063; 2205b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[57] = -513; 2206b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[58] = 3952; 2207b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[58] = -1075; 2208b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[59] = -3778; 2209b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[59] = -1581; 2210b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[60] = -301; 2211b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[60] = -4084; 2212b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[61] = -4026; 2213b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[61] = 751; 2214b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[62] = -3346; 2215b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[62] = 2361; 2216b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[63] = -2426; 2217b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[63] = 3299; 2218b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[64] = 428; 2219b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[64] = -4073; 2220b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[65] = 3968; 2221b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[65] = 1012; 2222b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[66] = 2900; 2223b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[66] = -2892; 2224b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[67] = -263; 2225b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[67] = 4087; 2226b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[68] = 4083; 2227b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[68] = 322; 2228b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[69] = 2024; 2229b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[69] = 3560; 2230b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[70] = 4015; 2231b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[70] = 808; 2232b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[71] = -3971; 2233b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[71] = -1000; 2234b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[72] = 3785; 2235b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[72] = -1564; 2236b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[73] = -3726; 2237b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[73] = 1701; 2238b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[74] = -3714; 2239b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[74] = 1725; 2240b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[75] = 743; 2241b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[75] = 4027; 2242b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[76] = 875; 2243b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[76] = -4001; 2244b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[77] = 294; 2245b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[77] = 4085; 2246b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[78] = 2611; 2247b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[78] = 3155; 2248b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[79] = 2491; 2249b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[79] = -3251; 2250b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[80] = 1558; 2251b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[80] = 3787; 2252b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[81] = -2063; 2253b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[81] = -3538; 2254b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[82] = 3809; 2255b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[82] = -1505; 2256b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[83] = -2987; 2257b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[83] = 2802; 2258b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[84] = -1955; 2259b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[84] = 3599; 2260b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[85] = 1980; 2261b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[85] = -3585; 2262b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[86] = -539; 2263b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[86] = -4060; 2264b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[87] = -3210; 2265b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[87] = 2543; 2266b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[88] = 2415; 2267b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[88] = -3308; 2268b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[89] = 1587; 2269b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[89] = 3775; 2270b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[90] = -3943; 2271b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[90] = 1106; 2272b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[91] = 3476; 2273b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[91] = 2165; 2274b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[92] = 2253; 2275b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[92] = 3420; 2276b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[93] = -2584; 2277b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[93] = 3177; 2278b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[94] = 3804; 2279b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[94] = -1518; 2280b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[95] = -3637; 2281b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[95] = 1883; 2282b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[96] = 3289; 2283b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[96] = -2440; 2284b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[97] = -1621; 2285b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[97] = 3761; 2286b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[98] = 1645; 2287b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[98] = 3751; 2288b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[99] = -3471; 2289b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[99] = 2173; 2290b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[100] = 4071; 2291b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[100] = -449; 2292b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[101] = -872; 2293b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[101] = -4001; 2294b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[102] = -3897; 2295b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[102] = 1259; 2296b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[103] = -3590; 2297b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[103] = 1970; 2298b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[104] = -2456; 2299b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[104] = -3277; 2300b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[105] = -3004; 2301b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[105] = 2783; 2302b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[106] = 2589; 2303b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[106] = 3173; 2304b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[107] = 3727; 2305b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[107] = -1698; 2306b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[108] = 2992; 2307b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[108] = 2796; 2308b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[109] = 794; 2309b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[109] = -4018; 2310b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[110] = -918; 2311b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[110] = 3991; 2312b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[111] = 1446; 2313b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[111] = -3831; 2314b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[112] = 3871; 2315b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[112] = -1338; 2316b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[113] = -612; 2317b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[113] = -4049; 2318b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[114] = -1566; 2319b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[114] = -3784; 2320b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[115] = 672; 2321b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[115] = -4040; 2322b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[116] = 3841; 2323b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[116] = 1422; 2324b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[117] = 3545; 2325b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[117] = -2051; 2326b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[118] = -1982; 2327b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[118] = -3584; 2328b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[119] = -3413; 2329b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[119] = 2263; 2330b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[120] = -3265; 2331b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[120] = -2473; 2332b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[121] = -2876; 2333b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[121] = -2915; 2334b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[122] = 4094; 2335b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[122] = -117; 2336b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[123] = -269; 2337b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[123] = 4087; 2338b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[124] = -4077; 2339b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[124] = 391; 2340b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[125] = -3759; 2341b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[125] = 1626; 2342b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[126] = 1639; 2343b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[126] = 3753; 2344b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[127] = 3041; 2345b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[127] = -2743; 2346b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[128] = 5; 2347b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[128] = 4095; 2348b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[129] = 2778; 2349b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[129] = -3009; 2350b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[130] = 1121; 2351b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[130] = -3939; 2352b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[131] = -455; 2353b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[131] = -4070; 2354b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[132] = 3532; 2355b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[132] = 2073; 2356b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[133] = -143; 2357b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[133] = -4093; 2358b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[134] = -2357; 2359b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[134] = -3349; 2360b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[135] = 458; 2361b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[135] = 4070; 2362b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[136] = -2887; 2363b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[136] = -2904; 2364b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[137] = -1104; 2365b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[137] = 3944; 2366b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[138] = -2104; 2367b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[138] = -3513; 2368b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[139] = 126; 2369b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[139] = 4094; 2370b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[140] = -3655; 2371b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[140] = -1848; 2372b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[141] = -3896; 2373b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[141] = 1263; 2374b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[142] = -3874; 2375b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[142] = -1327; 2376b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[143] = 4058; 2377b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[143] = 553; 2378b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[144] = -1831; 2379b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[144] = -3663; 2380b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[145] = -255; 2381b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[145] = -4088; 2382b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[146] = -1211; 2383b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[146] = 3912; 2384b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[147] = 445; 2385b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[147] = 4071; 2386b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[148] = 2268; 2387b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[148] = 3410; 2388b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[149] = -4010; 2389b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[149] = 833; 2390b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[150] = 2621; 2391b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[150] = 3147; 2392b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[151] = -250; 2393b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[151] = 4088; 2394b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[152] = -3409; 2395b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[152] = -2269; 2396b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[153] = -2710; 2397b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[153] = -3070; 2398b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[154] = 4063; 2399b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[154] = 518; 2400b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[155] = -3611; 2401b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[155] = -1933; 2402b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[156] = -3707; 2403b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[156] = -1741; 2404b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[157] = -1151; 2405b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[157] = -3930; 2406b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[158] = 3976; 2407b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[158] = -983; 2408b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[159] = -1736; 2409b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[159] = 3709; 2410b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[160] = 3669; 2411b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[160] = 1820; 2412b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[161] = -143; 2413b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[161] = 4093; 2414b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[162] = -3879; 2415b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[162] = -1313; 2416b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[163] = -2242; 2417b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[163] = -3427; 2418b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[164] = -4095; 2419b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[164] = 0; 2420b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[165] = -1159; 2421b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[165] = -3928; 2422b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[166] = -3155; 2423b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[166] = 2611; 2424b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[167] = -2887; 2425b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[167] = -2904; 2426b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[168] = -4095; 2427b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[168] = 56; 2428b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[169] = -3861; 2429b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[169] = -1364; 2430b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[170] = -2814; 2431b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[170] = 2976; 2432b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[171] = -3680; 2433b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[171] = -1798; 2434b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[172] = -4094; 2435b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[172] = -107; 2436b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[173] = -3626; 2437b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[173] = 1903; 2438b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[174] = 3403; 2439b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[174] = 2278; 2440b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[175] = -1735; 2441b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[175] = -3710; 2442b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[176] = -2126; 2443b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[176] = -3500; 2444b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[177] = 3183; 2445b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[177] = -2577; 2446b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[178] = -3499; 2447b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[178] = 2128; 2448b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[179] = -1736; 2449b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[179] = 3709; 2450b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[180] = 2592; 2451b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[180] = -3170; 2452b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[181] = 3875; 2453b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[181] = 1326; 2454b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[182] = 3596; 2455b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[182] = 1960; 2456b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[183] = 3915; 2457b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[183] = -1202; 2458b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[184] = 1570; 2459b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[184] = 3783; 2460b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[185] = -3319; 2461b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[185] = -2400; 2462b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[186] = 4019; 2463b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[186] = 787; 2464b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[187] = -187; 2465b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[187] = 4091; 2466b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[188] = 1370; 2467b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[188] = -3859; 2468b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[189] = -4091; 2469b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[189] = 199; 2470b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[190] = 3626; 2471b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[190] = 1904; 2472b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[191] = -2943; 2473b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[191] = 2848; 2474b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[192] = 56; 2475b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[192] = 4095; 2476b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[193] = 2824; 2477b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[193] = 2966; 2478b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[194] = -3994; 2479b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[194] = -904; 2480b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[195] = 56; 2481b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[195] = 4095; 2482b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[196] = -2045; 2483b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[196] = 3548; 2484b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[197] = -3653; 2485b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[197] = 1850; 2486b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[198] = -2864; 2487b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[198] = 2927; 2488b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[199] = -1996; 2489b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[199] = 3576; 2490b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[200] = -4061; 2491b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[200] = 527; 2492b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[201] = 159; 2493b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[201] = 4092; 2494b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[202] = -3363; 2495b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[202] = 2336; 2496b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[203] = -4074; 2497b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[203] = 421; 2498b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[204] = 2043; 2499b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[204] = 3549; 2500b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[205] = 4095; 2501b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[205] = -70; 2502b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[206] = -2107; 2503b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[206] = -3512; 2504b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[207] = -1973; 2505b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[207] = 3589; 2506b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[208] = -3138; 2507b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[208] = 2631; 2508b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[209] = -3625; 2509b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[209] = -1905; 2510b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[210] = 2413; 2511b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[210] = 3309; 2512b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[211] = -50; 2513b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[211] = -4095; 2514b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[212] = 2813; 2515b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[212] = 2976; 2516b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[213] = -535; 2517b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[213] = -4060; 2518b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[214] = 1250; 2519b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[214] = 3900; 2520b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[215] = 1670; 2521b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[215] = -3739; 2522b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[216] = 1945; 2523b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[216] = -3604; 2524b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[217] = -476; 2525b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[217] = -4068; 2526b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[218] = -3659; 2527b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[218] = -1840; 2528b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[219] = 2745; 2529b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[219] = 3039; 2530b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[220] = -674; 2531b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[220] = -4040; 2532b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[221] = 2383; 2533b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[221] = 3330; 2534b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[222] = 4086; 2535b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[222] = 274; 2536b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[223] = -4030; 2537b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[223] = 730; 2538b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[224] = 768; 2539b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[224] = -4023; 2540b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[225] = 3925; 2541b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[225] = 1170; 2542b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[226] = 785; 2543b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[226] = 4019; 2544b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[227] = -3101; 2545b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[227] = -2675; 2546b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[228] = 4030; 2547b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[228] = -729; 2548b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[229] = 3422; 2549b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[229] = 2249; 2550b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[230] = -3847; 2551b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[230] = 1403; 2552b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[231] = 3902; 2553b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[231] = -1243; 2554b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[232] = 2114; 2555b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[232] = -3507; 2556b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[233] = -2359; 2557b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[233] = 3348; 2558b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[234] = 3754; 2559b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[234] = -1638; 2560b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[235] = -4095; 2561b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[235] = -83; 2562b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[236] = 2301; 2563b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[236] = -3388; 2564b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[237] = 3336; 2565b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[237] = 2375; 2566b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[238] = -2045; 2567b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[238] = 3548; 2568b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[239] = -413; 2569b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[239] = -4075; 2570b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[240] = 1848; 2571b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[240] = 3655; 2572b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[241] = 4072; 2573b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[241] = -437; 2574b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[242] = 4069; 2575b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[242] = -463; 2576b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[243] = 1386; 2577b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[243] = -3854; 2578b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[244] = 966; 2579b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[244] = 3980; 2580b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[245] = -1684; 2581b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[245] = -3733; 2582b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[246] = 2953; 2583b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[246] = 2837; 2584b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[247] = -3961; 2585b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[247] = -1040; 2586b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[248] = 3512; 2587b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[248] = -2107; 2588b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[249] = 1363; 2589b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[249] = 3862; 2590b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[250] = 1883; 2591b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[250] = 3637; 2592b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[251] = 2657; 2593b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[251] = 3116; 2594b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[252] = 2347; 2595b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[252] = -3356; 2596b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[253] = -1635; 2597b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[253] = -3755; 2598b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[254] = 3170; 2599b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[254] = 2593; 2600b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[255] = 2856; 2601b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[255] = 2935; 2602b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[256] = 494; 2603b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[256] = 4066; 2604b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[257] = 1936; 2605b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[257] = -3609; 2606b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[258] = 245; 2607b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[258] = 4088; 2608b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[259] = -1211; 2609b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[259] = -3912; 2610b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[260] = -3600; 2611b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[260] = 1952; 2612b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[261] = 1632; 2613b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[261] = 3756; 2614b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[262] = 2341; 2615b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[262] = 3360; 2616b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[263] = 186; 2617b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[263] = -4091; 2618b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[264] = 4011; 2619b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[264] = 829; 2620b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[265] = -3490; 2621b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[265] = -2143; 2622b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[266] = 269; 2623b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[266] = -4087; 2624b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[267] = -2939; 2625b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[267] = 2852; 2626b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[268] = 1600; 2627b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[268] = 3770; 2628b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[269] = -3405; 2629b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[269] = -2275; 2630b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[270] = -3134; 2631b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[270] = -2636; 2632b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[271] = 2642; 2633b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[271] = -3129; 2634b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[272] = 3629; 2635b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[272] = 1898; 2636b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[273] = 3413; 2637b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[273] = 2264; 2638b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[274] = 2050; 2639b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[274] = 3545; 2640b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[275] = 988; 2641b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[275] = -3975; 2642b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[276] = -660; 2643b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[276] = 4042; 2644b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[277] = 978; 2645b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[277] = -3977; 2646b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[278] = 1965; 2647b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[278] = -3593; 2648b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[279] = -1513; 2649b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[279] = -3806; 2650b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[280] = -4076; 2651b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[280] = 401; 2652b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[281] = -4094; 2653b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[281] = -92; 2654b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[282] = -1914; 2655b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[282] = 3621; 2656b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[283] = 2006; 2657b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[283] = -3570; 2658b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[284] = -1550; 2659b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[284] = -3791; 2660b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[285] = 3774; 2661b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[285] = -1591; 2662b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[286] = -3958; 2663b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[286] = 1052; 2664b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[287] = -3576; 2665b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[287] = 1997; 2666b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[288] = -382; 2667b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[288] = 4078; 2668b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[289] = 1288; 2669b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[289] = 3888; 2670b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[290] = -2965; 2671b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[290] = -2825; 2672b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[291] = 1608; 2673b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[291] = 3767; 2674b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[292] = 3052; 2675b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[292] = -2731; 2676b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[293] = -622; 2677b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[293] = 4048; 2678b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[294] = -3836; 2679b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[294] = 1434; 2680b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[295] = -3542; 2681b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[295] = 2056; 2682b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[296] = -2648; 2683b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[296] = 3124; 2684b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[297] = -1178; 2685b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[297] = -3922; 2686b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[298] = -1109; 2687b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[298] = 3942; 2688b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[299] = 3910; 2689b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[299] = 1217; 2690b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[300] = 1199; 2691b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[300] = -3916; 2692b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[301] = -3386; 2693b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[301] = 2303; 2694b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[302] = -3453; 2695b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[302] = 2202; 2696b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[303] = -2877; 2697b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[303] = 2914; 2698b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[304] = 4095; 2699b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[304] = -47; 2700b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[305] = 3635; 2701b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[305] = 1886; 2702b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[306] = -2134; 2703b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[306] = -3495; 2704b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[307] = 613; 2705b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[307] = -4049; 2706b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[308] = -2700; 2707b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[308] = 3079; 2708b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[309] = 4091; 2709b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[309] = -195; 2710b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[310] = 3989; 2711b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[310] = -927; 2712b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[311] = -2385; 2713b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[311] = 3329; 2714b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[312] = 4094; 2715b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[312] = -103; 2716b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[313] = 1044; 2717b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[313] = -3960; 2718b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[314] = -1734; 2719b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[314] = -3710; 2720b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[315] = 1646; 2721b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[315] = 3750; 2722b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[316] = 575; 2723b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[316] = 4055; 2724b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[317] = -2629; 2725b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[317] = -3140; 2726b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[318] = 3266; 2727b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[318] = 2471; 2728b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[319] = 4091; 2729b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[319] = -194; 2730b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[320] = -2154; 2731b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[320] = 3483; 2732b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[321] = 659; 2733b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[321] = 4042; 2734b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[322] = -1785; 2735b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[322] = -3686; 2736b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[323] = -717; 2737b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[323] = -4032; 2738b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[324] = 4095; 2739b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[324] = -37; 2740b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[325] = -2963; 2741b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[325] = -2827; 2742b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[326] = -2645; 2743b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[326] = -3126; 2744b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[327] = 2619; 2745b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[327] = -3148; 2746b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[328] = 1855; 2747b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[328] = -3651; 2748b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[329] = -3726; 2749b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[329] = 1699; 2750b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[330] = -3437; 2751b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[330] = 2227; 2752b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[331] = 2948; 2753b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[331] = 2842; 2754b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[332] = -2125; 2755b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[332] = 3501; 2756b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[333] = -1700; 2757b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[333] = 3726; 2758b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[334] = 4094; 2759b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[334] = -101; 2760b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[335] = 2084; 2761b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[335] = -3525; 2762b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[336] = 3225; 2763b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[336] = -2524; 2764b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[337] = 2220; 2765b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[337] = 3442; 2766b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[338] = 3174; 2767b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[338] = 2588; 2768b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[339] = 229; 2769b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[339] = -4089; 2770b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[340] = -2381; 2771b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[340] = -3332; 2772b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[341] = -3677; 2773b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[341] = -1803; 2774b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[342] = -3191; 2775b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[342] = -2567; 2776b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[343] = 2465; 2777b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[343] = 3270; 2778b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[344] = 2681; 2779b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[344] = -3096; 2780b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[345] = 975; 2781b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[345] = -3978; 2782b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[346] = 2004; 2783b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[346] = -3572; 2784b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[347] = -3442; 2785b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[347] = -2219; 2786b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[348] = 3676; 2787b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[348] = -1805; 2788b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[349] = -3753; 2789b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[349] = 1638; 2790b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[350] = 3544; 2791b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[350] = 2053; 2792b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[351] = 397; 2793b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[351] = -4076; 2794b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[352] = 2221; 2795b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[352] = 3440; 2796b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[353] = -302; 2797b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[353] = 4084; 2798b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[354] = 4083; 2799b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[354] = -323; 2800b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[355] = -2253; 2801b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[355] = -3420; 2802b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[356] = -3038; 2803b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[356] = 2746; 2804b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[357] = 2884; 2805b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[357] = 2908; 2806b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[358] = 4070; 2807b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[358] = 454; 2808b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[359] = -1072; 2809b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[359] = -3953; 2810b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[360] = 3831; 2811b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[360] = 1449; 2812b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[361] = 3663; 2813b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[361] = -1831; 2814b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[362] = -1971; 2815b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[362] = 3590; 2816b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[363] = 3226; 2817b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[363] = -2522; 2818b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[364] = -145; 2819b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[364] = -4093; 2820b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[365] = 1882; 2821b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[365] = -3637; 2822b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[366] = 529; 2823b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[366] = 4061; 2824b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[367] = 2637; 2825b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[367] = 3133; 2826b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[368] = -4077; 2827b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[368] = 389; 2828b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[369] = 2156; 2829b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[369] = -3482; 2830b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[370] = -3276; 2831b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[370] = 2458; 2832b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[371] = -2687; 2833b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[371] = -3090; 2834b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[372] = 3469; 2835b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[372] = -2177; 2836b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[373] = -4093; 2837b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[373] = -139; 2838b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[374] = -850; 2839b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[374] = 4006; 2840b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[375] = -625; 2841b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[375] = 4048; 2842b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[376] = 1110; 2843b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[376] = -3942; 2844b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[377] = -3078; 2845b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[377] = -2702; 2846b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[378] = -2719; 2847b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[378] = 3063; 2848b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[379] = 742; 2849b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[379] = 4028; 2850b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[380] = -3902; 2851b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[380] = -1245; 2852b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[381] = 3888; 2853b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[381] = -1287; 2854b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[382] = -4081; 2855b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[382] = 347; 2856b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[383] = 1070; 2857b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[383] = 3953; 2858b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[384] = -996; 2859b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[384] = -3972; 2860b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[385] = 4041; 2861b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[385] = -668; 2862b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[386] = -2712; 2863b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[386] = 3069; 2864b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[387] = -3403; 2865b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[387] = -2279; 2866b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[388] = -3320; 2867b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[388] = -2398; 2868b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[389] = 3036; 2869b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[389] = -2749; 2870b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[390] = 1308; 2871b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[390] = -3881; 2872b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[391] = 2256; 2873b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[391] = 3418; 2874b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[392] = -1486; 2875b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[392] = 3816; 2876b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[393] = -2771; 2877b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[393] = -3015; 2878b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[394] = -3883; 2879b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[394] = -1302; 2880b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[395] = -3867; 2881b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[395] = -1349; 2882b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[396] = 3952; 2883b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[396] = -1075; 2884b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[397] = -789; 2885b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[397] = 4019; 2886b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[398] = 1458; 2887b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[398] = 3827; 2888b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[399] = 3832; 2889b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[399] = -1446; 2890b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[400] = -3001; 2891b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[400] = -2787; 2892b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[401] = 3463; 2893b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[401] = 2186; 2894b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[402] = 3606; 2895b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[402] = 1942; 2896b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[403] = 4023; 2897b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[403] = 764; 2898b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[404] = 3387; 2899b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[404] = 2303; 2900b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[405] = 2648; 2901b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[405] = -3124; 2902b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[406] = 1370; 2903b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[406] = -3860; 2904b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[407] = -3134; 2905b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[407] = 2636; 2906b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[408] = 4051; 2907b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[408] = -600; 2908b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[409] = -1977; 2909b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[409] = -3587; 2910b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[410] = 3160; 2911b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[410] = 2605; 2912b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[411] = 4042; 2913b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[411] = 659; 2914b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[412] = 3004; 2915b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[412] = 2783; 2916b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[413] = 3370; 2917b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[413] = 2327; 2918b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[414] = -419; 2919b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[414] = -4074; 2920b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[415] = -1968; 2921b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[415] = 3591; 2922b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[416] = -3705; 2923b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[416] = -1746; 2924b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[417] = -3331; 2925b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[417] = -2383; 2926b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[418] = -3634; 2927b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[418] = 1888; 2928b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[419] = -1981; 2929b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[419] = -3584; 2930b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[420] = 4069; 2931b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[420] = -469; 2932b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[421] = -628; 2933b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[421] = -4047; 2934b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[422] = -1900; 2935b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[422] = 3628; 2936b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[423] = 1039; 2937b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[423] = -3961; 2938b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[424] = 2554; 2939b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[424] = -3201; 2940b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[425] = -2955; 2941b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[425] = 2836; 2942b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[426] = 2286; 2943b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[426] = -3398; 2944b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[427] = -1624; 2945b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[427] = 3760; 2946b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[428] = 2213; 2947b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[428] = 3446; 2948b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[429] = -3989; 2949b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[429] = -926; 2950b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[430] = 192; 2951b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[430] = -4091; 2952b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[431] = -723; 2953b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[431] = 4031; 2954b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[432] = 2878; 2955b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[432] = 2913; 2956b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[433] = -2109; 2957b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[433] = 3511; 2958b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[434] = 1463; 2959b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[434] = -3825; 2960b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[435] = -741; 2961b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[435] = -4028; 2962b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[436] = -1314; 2963b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[436] = -3879; 2964b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[437] = 3115; 2965b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[437] = 2659; 2966b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[438] = -3160; 2967b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[438] = -2605; 2968b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[439] = 1868; 2969b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[439] = 3644; 2970b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[440] = -824; 2971b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[440] = 4012; 2972b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[441] = 781; 2973b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[441] = 4020; 2974b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[442] = -1257; 2975b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[442] = -3898; 2976b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[443] = 3331; 2977b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[443] = -2382; 2978b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[444] = 1642; 2979b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[444] = -3752; 2980b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[445] = 3748; 2981b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[445] = -1650; 2982b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[446] = -487; 2983b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[446] = -4066; 2984b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[447] = 3085; 2985b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[447] = -2694; 2986b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[448] = 4009; 2987b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[448] = 839; 2988b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[449] = -2308; 2989b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[449] = -3383; 2990b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[450] = 3850; 2991b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[450] = 1397; 2992b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[451] = -4078; 2993b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[451] = -374; 2994b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[452] = 2989; 2995b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[452] = -2799; 2996b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[453] = 3023; 2997b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[453] = -2762; 2998b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[454] = 1397; 2999b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[454] = -3850; 3000b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[455] = 323; 3001b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[455] = 4083; 3002b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[456] = 268; 3003b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[456] = -4087; 3004b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[457] = 2414; 3005b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[457] = 3308; 3006b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[458] = 3876; 3007b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[458] = 1322; 3008b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[459] = -3584; 3009b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[459] = 1982; 3010b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[460] = 1603; 3011b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[460] = 3769; 3012b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[461] = -1502; 3013b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[461] = 3810; 3014b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[462] = 1318; 3015b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[462] = 3878; 3016b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[463] = 1554; 3017b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[463] = -3789; 3018b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[464] = 2492; 3019b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[464] = 3250; 3020b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[465] = -4093; 3021b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[465] = -154; 3022b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[466] = 4008; 3023b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[466] = 842; 3024b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[467] = -2279; 3025b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[467] = 3403; 3026b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[468] = 3013; 3027b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[468] = 2774; 3028b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[469] = 2557; 3029b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[469] = 3199; 3030b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[470] = 4068; 3031b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[470] = 475; 3032b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[471] = 3324; 3033b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[471] = -2392; 3034b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[472] = 2653; 3035b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[472] = -3120; 3036b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[473] = 796; 3037b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[473] = 4017; 3038b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[474] = -1312; 3039b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[474] = 3880; 3040b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[475] = 1794; 3041b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[475] = 3681; 3042b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[476] = -2347; 3043b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[476] = -3356; 3044b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[477] = -4008; 3045b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[477] = -840; 3046b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[478] = -3773; 3047b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[478] = -1592; 3048b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[479] = 1609; 3049b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[479] = 3766; 3050b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[480] = -1564; 3051b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[480] = -3785; 3052b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[481] = 3004; 3053b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[481] = 2784; 3054b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[482] = 1258; 3055b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[482] = 3897; 3056b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[483] = 3729; 3057b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[483] = 1693; 3058b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[484] = -4095; 3059b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[484] = -28; 3060b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[485] = -4093; 3061b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[485] = -146; 3062b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[486] = 1393; 3063b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[486] = -3851; 3064b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[487] = 297; 3065b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[487] = -4085; 3066b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[488] = 2294; 3067b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[488] = 3393; 3068b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[489] = -2562; 3069b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[489] = 3195; 3070b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[490] = -1716; 3071b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[490] = -3718; 3072b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[491] = 2224; 3073b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[491] = -3439; 3074b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[492] = 2032; 3075b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[492] = 3555; 3076b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[493] = -2968; 3077b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[493] = 2822; 3078b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[494] = 2338; 3079b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[494] = 3363; 3080b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[495] = 1584; 3081b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[495] = -3776; 3082b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[496] = -3072; 3083b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[496] = 2708; 3084b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[497] = -1596; 3085b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[497] = -3771; 3086b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[498] = -2256; 3087b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[498] = -3418; 3088b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[499] = 4095; 3089b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[499] = 89; 3090b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[500] = -1949; 3091b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[500] = 3602; 3092b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[501] = 1844; 3093b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[501] = 3657; 3094b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[502] = -3375; 3095b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[502] = 2319; 3096b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[503] = -1481; 3097b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[503] = -3818; 3098b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[504] = 3228; 3099b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[504] = -2520; 3100b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[505] = 1116; 3101b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[505] = 3940; 3102b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[506] = -2783; 3103b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[506] = 3004; 3104b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[507] = 3915; 3105b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[507] = 1201; 3106b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[508] = 283; 3107b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[508] = 4086; 3108b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[509] = -3732; 3109b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[509] = 1685; 3110b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[510] = -433; 3111b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[510] = -4072; 3112b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[511] = -3667; 3113b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[511] = 1823; 3114b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[512] = 3883; 3115b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[512] = 1300; 3116b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[513] = -3742; 3117b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[513] = 1663; 3118b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[514] = 4093; 3119b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[514] = -143; 3120b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[515] = 3874; 3121b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[515] = 1328; 3122b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[516] = -3800; 3123b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[516] = 1528; 3124b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[517] = -1257; 3125b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[517] = 3898; 3126b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[518] = -1606; 3127b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[518] = 3767; 3128b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[519] = 3394; 3129b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[519] = 2291; 3130b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[520] = 2255; 3131b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[520] = 3419; 3132b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[521] = -4094; 3133b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[521] = 120; 3134b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[522] = -3767; 3135b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[522] = 1606; 3136b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[523] = 1849; 3137b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[523] = -3654; 3138b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[524] = -2883; 3139b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[524] = 2908; 3140b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[525] = 3469; 3141b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[525] = 2176; 3142b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[526] = 2654; 3143b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[526] = 3119; 3144b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[527] = -239; 3145b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[527] = 4088; 3146b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[528] = -651; 3147b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[528] = 4043; 3148b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[529] = -1140; 3149b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[529] = 3934; 3150b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[530] = 328; 3151b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[530] = -4082; 3152b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[531] = 3246; 3153b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[531] = 2497; 3154b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[532] = 4026; 3155b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[532] = -753; 3156b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[533] = -2041; 3157b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[533] = -3550; 3158b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[534] = -1154; 3159b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[534] = 3929; 3160b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[535] = -2710; 3161b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[535] = 3070; 3162b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[536] = -2860; 3163b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[536] = 2932; 3164b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[537] = 2097; 3165b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[537] = 3517; 3166b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[538] = 3492; 3167b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[538] = -2140; 3168b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[539] = 3123; 3169b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[539] = 2649; 3170b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[540] = 3360; 3171b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[540] = 2342; 3172b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[541] = 2498; 3173b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[541] = 3245; 3174b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[542] = 3976; 3175b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[542] = 982; 3176b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[543] = -2441; 3177b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[543] = -3288; 3178b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[544] = 3601; 3179b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[544] = 1951; 3180b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[545] = -4008; 3181b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[545] = -842; 3182b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[546] = 1243; 3183b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[546] = 3902; 3184b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[547] = 4069; 3185b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[547] = 466; 3186b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[548] = -2031; 3187b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[548] = 3556; 3188b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[549] = 4077; 3189b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[549] = 386; 3190b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[550] = -3112; 3191b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[550] = -2663; 3192b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[551] = 4087; 3193b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[551] = -262; 3194b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[552] = 4087; 3195b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[552] = 266; 3196b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[553] = -3907; 3197b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[553] = -1228; 3198b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[554] = -1611; 3199b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[554] = 3765; 3200b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[555] = 3066; 3201b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[555] = -2715; 3202b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[556] = 2657; 3203b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[556] = 3117; 3204b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[557] = 3912; 3205b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[557] = -1213; 3206b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[558] = -2531; 3207b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[558] = -3220; 3208b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[559] = 3500; 3209b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[559] = -2127; 3210b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[560] = -76; 3211b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[560] = -4095; 3212b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[561] = 3413; 3213b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[561] = -2264; 3214b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[562] = -4071; 3215b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[562] = -448; 3216b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[563] = 828; 3217b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[563] = 4011; 3218b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[564] = 3664; 3219b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[564] = 1830; 3220b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[565] = -1578; 3221b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[565] = 3779; 3222b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[566] = 3555; 3223b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[566] = 2033; 3224b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[567] = 3868; 3225b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[567] = -1345; 3226b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[568] = 4054; 3227b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[568] = -580; 3228b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[569] = -4094; 3229b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[569] = 124; 3230b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[570] = -3820; 3231b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[570] = -1477; 3232b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[571] = -3658; 3233b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[571] = -1842; 3234b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[572] = 2595; 3235b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[572] = 3168; 3236b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[573] = 3354; 3237b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[573] = 2350; 3238b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[574] = -701; 3239b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[574] = -4035; 3240b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[575] = -772; 3241b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[575] = -4022; 3242b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[576] = 2799; 3243b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[576] = 2990; 3244b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[577] = -3632; 3245b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[577] = 1893; 3246b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[578] = 310; 3247b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[578] = 4084; 3248b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[579] = 3984; 3249b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[579] = -947; 3250b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[580] = 3794; 3251b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[580] = -1542; 3252b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[581] = -2419; 3253b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[581] = 3304; 3254b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[582] = -3916; 3255b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[582] = 1200; 3256b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[583] = -3886; 3257b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[583] = 1292; 3258b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[584] = -3299; 3259b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[584] = 2426; 3260b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[585] = -437; 3261b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[585] = 4072; 3262b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[586] = 2053; 3263b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[586] = -3544; 3264b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[587] = 3987; 3265b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[587] = 937; 3266b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[588] = -789; 3267b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[588] = -4019; 3268b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[589] = 4055; 3269b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[589] = -575; 3270b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[590] = -3894; 3271b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[590] = 1270; 3272b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[591] = 4003; 3273b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[591] = -864; 3274b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[592] = -3060; 3275b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[592] = 2721; 3276b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[593] = -4009; 3277b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[593] = 836; 3278b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[594] = -1655; 3279b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[594] = -3746; 3280b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[595] = 3954; 3281b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[595] = -1067; 3282b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[596] = -773; 3283b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[596] = 4022; 3284b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[597] = -422; 3285b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[597] = 4074; 3286b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[598] = -3384; 3287b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[598] = 2306; 3288b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[599] = 195; 3289b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[599] = -4091; 3290b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[600] = -298; 3291b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[600] = 4085; 3292b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[601] = -3988; 3293b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[601] = 931; 3294b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[602] = 2014; 3295b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[602] = -3566; 3296b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[603] = 3349; 3297b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[603] = -2357; 3298b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[604] = 3800; 3299b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[604] = 1526; 3300b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[605] = 3858; 3301b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[605] = 1374; 3302b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[606] = 2947; 3303b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[606] = 2844; 3304b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[607] = -1483; 3305b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[607] = -3818; 3306b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[608] = 4056; 3307b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[608] = -565; 3308b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[609] = 2612; 3309b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[609] = -3154; 3310b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[610] = 2326; 3311b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[610] = 3371; 3312b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[611] = -3545; 3313b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[611] = 2051; 3314b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[612] = -1001; 3315b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[612] = -3971; 3316b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[613] = 3211; 3317b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[613] = 2541; 3318b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[614] = -2717; 3319b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[614] = 3065; 3320b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[615] = -3159; 3321b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[615] = -2606; 3322b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[616] = 2869; 3323b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[616] = -2922; 3324b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[617] = -1290; 3325b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[617] = -3887; 3326b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[618] = 2479; 3327b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[618] = 3260; 3328b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[619] = 3420; 3329b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[619] = 2252; 3330b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[620] = 1823; 3331b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[620] = 3667; 3332b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[621] = 3368; 3333b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[621] = 2330; 3334b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[622] = -3819; 3335b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[622] = -1480; 3336b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[623] = 3800; 3337b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[623] = 1528; 3338b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[624] = 3773; 3339b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[624] = 1594; 3340b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[625] = -189; 3341b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[625] = -4091; 3342b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[626] = -4067; 3343b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[626] = -485; 3344b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[627] = 2277; 3345b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[627] = -3404; 3346b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[628] = -4089; 3347b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[628] = -233; 3348b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[629] = -3634; 3349b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[629] = 1889; 3350b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[630] = 3292; 3351b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[630] = 2437; 3352b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[631] = -530; 3353b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[631] = 4061; 3354b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[632] = -3109; 3355b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[632] = 2666; 3356b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[633] = -3741; 3357b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[633] = 1667; 3358b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[634] = -1903; 3359b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[634] = -3626; 3360b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[635] = 3879; 3361b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[635] = -1315; 3362b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[636] = 4083; 3363b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[636] = -315; 3364b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[637] = -1148; 3365b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[637] = 3931; 3366b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[638] = 2630; 3367b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[638] = 3139; 3368b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[639] = -4001; 3369b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[639] = 876; 3370b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[640] = -2295; 3371b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[640] = -3392; 3372b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[641] = 1090; 3373b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[641] = -3948; 3374b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[642] = -3024; 3375b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[642] = 2762; 3376b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[643] = 2728; 3377b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[643] = -3054; 3378b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[644] = -3305; 3379b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[644] = 2419; 3380b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[645] = 60; 3381b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[645] = 4095; 3382b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[646] = 4048; 3383b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[646] = -620; 3384b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[647] = 589; 3385b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[647] = -4053; 3386b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[648] = -3867; 3387b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[648] = 1347; 3388b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[649] = -2944; 3389b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[649] = -2847; 3390b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[650] = -2721; 3391b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[650] = 3060; 3392b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[651] = 2928; 3393b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[651] = 2863; 3394b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[652] = 801; 3395b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[652] = 4016; 3396b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[653] = -3644; 3397b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[653] = 1870; 3398b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[654] = -1648; 3399b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[654] = -3749; 3400b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[655] = 825; 3401b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[655] = -4012; 3402b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[656] = -2036; 3403b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[656] = -3553; 3404b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[657] = -1192; 3405b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[657] = -3918; 3406b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[658] = 2875; 3407b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[658] = 2916; 3408b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[659] = -1831; 3409b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[659] = -3663; 3410b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[660] = -2865; 3411b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[660] = -2926; 3412b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[661] = -575; 3413b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[661] = -4055; 3414b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[662] = -3870; 3415b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[662] = 1340; 3416b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[663] = -4080; 3417b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[663] = -356; 3418b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[664] = -2176; 3419b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[664] = -3469; 3420b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[665] = -2986; 3421b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[665] = -2803; 3422b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[666] = 3978; 3423b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[666] = -972; 3424b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[667] = 2437; 3425b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[667] = 3291; 3426b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[668] = -3528; 3427b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[668] = 2080; 3428b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[669] = -3300; 3429b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[669] = -2425; 3430b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[670] = 3085; 3431b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[670] = 2693; 3432b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[671] = -3700; 3433b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[671] = -1756; 3434b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[672] = 3216; 3435b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[672] = -2535; 3436b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[673] = 4094; 3437b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[673] = -91; 3438b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[674] = 3775; 3439b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[674] = -1589; 3440b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[675] = 1097; 3441b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[675] = -3946; 3442b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[676] = -152; 3443b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[676] = -4093; 3444b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[677] = -3490; 3445b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[677] = 2142; 3446b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[678] = 3747; 3447b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[678] = 1654; 3448b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[679] = -1490; 3449b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[679] = -3815; 3450b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[680] = -3998; 3451b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[680] = -886; 3452b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[681] = 3726; 3453b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[681] = -1700; 3454b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[682] = -1600; 3455b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[682] = 3770; 3456b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[683] = -87; 3457b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[683] = 4095; 3458b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[684] = 2538; 3459b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[684] = -3214; 3460b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[685] = -4095; 3461b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[685] = 52; 3462b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[686] = -3993; 3463b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[686] = -910; 3464b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[687] = 4051; 3465b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[687] = 603; 3466b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[688] = -1242; 3467b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[688] = -3902; 3468b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[689] = 2155; 3469b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[689] = 3482; 3470b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[690] = 1270; 3471b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[690] = 3893; 3472b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[691] = 1919; 3473b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[691] = -3618; 3474b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[692] = -3145; 3475b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[692] = 2623; 3476b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[693] = 2475; 3477b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[693] = 3263; 3478b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[694] = 2226; 3479b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[694] = -3437; 3480b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[695] = -3894; 3481b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[695] = -1269; 3482b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[696] = -429; 3483b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[696] = 4073; 3484b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[697] = -1346; 3485b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[697] = 3868; 3486b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[698] = 1297; 3487b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[698] = 3885; 3488b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[699] = 1699; 3489b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[699] = 3726; 3490b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[700] = -3375; 3491b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[700] = 2319; 3492b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[701] = 1577; 3493b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[701] = -3779; 3494b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[702] = -63; 3495b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[702] = 4095; 3496b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[703] = 1215; 3497b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[703] = -3911; 3498b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[704] = -1492; 3499b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[704] = 3814; 3500b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[705] = -1530; 3501b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[705] = -3799; 3502b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[706] = 3442; 3503b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[706] = 2218; 3504b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[707] = -3867; 3505b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[707] = -1349; 3506b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[708] = -3291; 3507b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[708] = -2437; 3508b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[709] = -2253; 3509b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[709] = -3420; 3510b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[710] = -150; 3511b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[710] = -4093; 3512b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[711] = -2686; 3513b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[711] = -3092; 3514b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[712] = 3470; 3515b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[712] = 2175; 3516b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[713] = -3826; 3517b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[713] = -1461; 3518b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[714] = -3148; 3519b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[714] = 2619; 3520b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[715] = -3858; 3521b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[715] = 1375; 3522b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[716] = -3844; 3523b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[716] = -1412; 3524b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[717] = -3652; 3525b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[717] = 1854; 3526b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[718] = 4018; 3527b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[718] = -791; 3528b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[719] = 179; 3529b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[719] = -4092; 3530b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[720] = 3498; 3531b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[720] = 2129; 3532b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[721] = -1999; 3533b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[721] = -3574; 3534b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[722] = 3531; 3535b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[722] = 2075; 3536b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[723] = 4050; 3537b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[723] = -606; 3538b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[724] = -1639; 3539b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[724] = 3753; 3540b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[725] = -3661; 3541b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[725] = 1835; 3542b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[726] = 4039; 3543b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[726] = 679; 3544b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[727] = 3561; 3545b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[727] = 2023; 3546b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[728] = 528; 3547b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[728] = 4061; 3548b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[729] = -634; 3549b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[729] = -4046; 3550b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[730] = 364; 3551b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[730] = -4079; 3552b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[731] = 2735; 3553b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[731] = 3048; 3554b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[732] = 3978; 3555b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[732] = 973; 3556b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[733] = -4073; 3557b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[733] = -427; 3558b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[734] = -3722; 3559b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[734] = 1708; 3560b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[735] = 2356; 3561b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[735] = -3350; 3562b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[736] = -1125; 3563b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[736] = -3938; 3564b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[737] = 4054; 3565b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[737] = 580; 3566b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[738] = 3328; 3567b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[738] = -2387; 3568b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[739] = 1439; 3569b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[739] = -3834; 3570b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[740] = 1746; 3571b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[740] = 3705; 3572b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[741] = 2507; 3573b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[741] = 3238; 3574b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[742] = 3839; 3575b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[742] = -1427; 3576b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[743] = 488; 3577b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[743] = -4066; 3578b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[744] = 1187; 3579b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[744] = 3920; 3580b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[745] = 2038; 3581b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[745] = -3552; 3582b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[746] = -905; 3583b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[746] = -3994; 3584b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[747] = -236; 3585b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[747] = 4089; 3586b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[748] = 208; 3587b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[748] = -4090; 3588b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[749] = 1660; 3589b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[749] = 3744; 3590b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[750] = -4074; 3591b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[750] = -415; 3592b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[751] = -2304; 3593b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[751] = 3385; 3594b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[752] = -2457; 3595b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[752] = 3276; 3596b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[753] = 3302; 3597b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[753] = 2423; 3598b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[754] = 1778; 3599b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[754] = -3689; 3600b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[755] = 2019; 3601b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[755] = 3563; 3602b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[756] = 4037; 3603b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[756] = 687; 3604b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[757] = -2365; 3605b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[757] = 3343; 3606b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[758] = 5; 3607b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[758] = -4095; 3608b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen q[759] = 160; 3609b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen r[759] = -4092; 3610b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 3611b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen} /*initRand*/ 3612b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 3613b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/** 3614b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * initializes the MEL-2_LINEAR LOOKUP TABLE 3615b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @param sig_inObj : sig PU internal object of the sub-object 3616b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @return void 3617b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @remarks translated from matlab code to c-code 3618b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @callgraph 3619b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @callergraph 3620b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * 3621b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * input 3622b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * - bilinTab : base address of bilinTable destination vector 3623b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * - alpha : warping factor 3624b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * - size : size of the vectors to be generated 3625b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * - A,B : base address of array of indexes for lookup table implementation 3626b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * - D : base address of delta array for lookup table implementation 3627b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * 3628b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * output 3629b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * - bilinTab, A, B, D : initialized vectors 3630b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen */ 3631b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenvoid mel_2_lin_init(sig_innerobj_t *sig_inObj) 3632b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen{ 3633b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 3634b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /*Declare variables tied to I/O PARAMS formerly passed by value or reference*/ 3635b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_single alpha; 3636b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int32 *D; 3637b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int32 size; 3638b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int16 *A; 3639b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 3640b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /*Link local variables with sig data object*/ 3641b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 3642b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen alpha = sig_inObj->warp_p; 3643b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen size = (sig_inObj->hfftsize_p) + 1; 3644b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A = sig_inObj->A_p; 3645b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D = sig_inObj->d_p; 3646b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /* 3647b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen fixed point interpolation tables 3648b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen scaling factor: 0x20 3649b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen corresponding bit shift: 5 3650b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen */ 3651b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 3652b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[0] = 0; 3653b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[0] = 0; 3654b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[1] = 2; 3655b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[1] = 14; 3656b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[2] = 4; 3657b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[2] = 29; 3658b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[3] = 7; 3659b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[3] = 11; 3660b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[4] = 9; 3661b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[4] = 24; 3662b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[5] = 12; 3663b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[5] = 5; 3664b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[6] = 14; 3665b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[6] = 18; 3666b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[7] = 16; 3667b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[7] = 30; 3668b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[8] = 19; 3669b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[8] = 9; 3670b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[9] = 21; 3671b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[9] = 19; 3672b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[10] = 23; 3673b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[10] = 29; 3674b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[11] = 26; 3675b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[11] = 5; 3676b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[12] = 28; 3677b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[12] = 12; 3678b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[13] = 30; 3679b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[13] = 19; 3680b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[14] = 32; 3681b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[14] = 24; 3682b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[15] = 34; 3683b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[15] = 27; 3684b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[16] = 36; 3685b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[16] = 30; 3686b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[17] = 38; 3687b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[17] = 31; 3688b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[18] = 40; 3689b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[18] = 31; 3690b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[19] = 42; 3691b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[19] = 29; 3692b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[20] = 44; 3693b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[20] = 26; 3694b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[21] = 46; 3695b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[21] = 22; 3696b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[22] = 48; 3697b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[22] = 17; 3698b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[23] = 50; 3699b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[23] = 10; 3700b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[24] = 52; 3701b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[24] = 2; 3702b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[25] = 53; 3703b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[25] = 24; 3704b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[26] = 55; 3705b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[26] = 13; 3706b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[27] = 57; 3707b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[27] = 1; 3708b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[28] = 58; 3709b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[28] = 20; 3710b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[29] = 60; 3711b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[29] = 5; 3712b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[30] = 61; 3713b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[30] = 21; 3714b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[31] = 63; 3715b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[31] = 4; 3716b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[32] = 64; 3717b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[32] = 18; 3718b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[33] = 65; 3719b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[33] = 31; 3720b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[34] = 67; 3721b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[34] = 11; 3722b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[35] = 68; 3723b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[35] = 21; 3724b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[36] = 69; 3725b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[36] = 31; 3726b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[37] = 71; 3727b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[37] = 7; 3728b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[38] = 72; 3729b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[38] = 14; 3730b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[39] = 73; 3731b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[39] = 21; 3732b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[40] = 74; 3733b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[40] = 27; 3734b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[41] = 75; 3735b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[41] = 31; 3736b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[42] = 77; 3737b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[42] = 3; 3738b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[43] = 78; 3739b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[43] = 6; 3740b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[44] = 79; 3741b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[44] = 8; 3742b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[45] = 80; 3743b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[45] = 10; 3744b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[46] = 81; 3745b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[46] = 10; 3746b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[47] = 82; 3747b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[47] = 10; 3748b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[48] = 83; 3749b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[48] = 9; 3750b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[49] = 84; 3751b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[49] = 8; 3752b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[50] = 85; 3753b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[50] = 6; 3754b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[51] = 86; 3755b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[51] = 3; 3756b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[52] = 86; 3757b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[52] = 31; 3758b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[53] = 87; 3759b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[53] = 27; 3760b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[54] = 88; 3761b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[54] = 23; 3762b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[55] = 89; 3763b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[55] = 18; 3764b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[56] = 90; 3765b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[56] = 12; 3766b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[57] = 91; 3767b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[57] = 6; 3768b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[58] = 91; 3769b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[58] = 31; 3770b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[59] = 92; 3771b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[59] = 24; 3772b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[60] = 93; 3773b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[60] = 16; 3774b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[61] = 94; 3775b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[61] = 8; 3776b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[62] = 94; 3777b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[62] = 31; 3778b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[63] = 95; 3779b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[63] = 22; 3780b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[64] = 96; 3781b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[64] = 13; 3782b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[65] = 97; 3783b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[65] = 3; 3784b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[66] = 97; 3785b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[66] = 25; 3786b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[67] = 98; 3787b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[67] = 14; 3788b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[68] = 99; 3789b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[68] = 3; 3790b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[69] = 99; 3791b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[69] = 24; 3792b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[70] = 100; 3793b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[70] = 13; 3794b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[71] = 101; 3795b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[71] = 1; 3796b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[72] = 101; 3797b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[72] = 21; 3798b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[73] = 102; 3799b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[73] = 8; 3800b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[74] = 102; 3801b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[74] = 27; 3802b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[75] = 103; 3803b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[75] = 14; 3804b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[76] = 104; 3805b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[76] = 1; 3806b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[77] = 104; 3807b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[77] = 19; 3808b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[78] = 105; 3809b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[78] = 6; 3810b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[79] = 105; 3811b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[79] = 24; 3812b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[80] = 106; 3813b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[80] = 9; 3814b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[81] = 106; 3815b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[81] = 27; 3816b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[82] = 107; 3817b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[82] = 12; 3818b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[83] = 107; 3819b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[83] = 29; 3820b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[84] = 108; 3821b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[84] = 14; 3822b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[85] = 108; 3823b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[85] = 31; 3824b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[86] = 109; 3825b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[86] = 15; 3826b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[87] = 109; 3827b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[87] = 31; 3828b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[88] = 110; 3829b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[88] = 16; 3830b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[89] = 110; 3831b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[89] = 31; 3832b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[90] = 111; 3833b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[90] = 15; 3834b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[91] = 111; 3835b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[91] = 31; 3836b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[92] = 112; 3837b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[92] = 14; 3838b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[93] = 112; 3839b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[93] = 30; 3840b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[94] = 113; 3841b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[94] = 13; 3842b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[95] = 113; 3843b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[95] = 28; 3844b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[96] = 114; 3845b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[96] = 11; 3846b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[97] = 114; 3847b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[97] = 26; 3848b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[98] = 115; 3849b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[98] = 9; 3850b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[99] = 115; 3851b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[99] = 23; 3852b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[100] = 116; 3853b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[100] = 6; 3854b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[101] = 116; 3855b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[101] = 20; 3856b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[102] = 117; 3857b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[102] = 2; 3858b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[103] = 117; 3859b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[103] = 16; 3860b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[104] = 117; 3861b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[104] = 31; 3862b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[105] = 118; 3863b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[105] = 13; 3864b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[106] = 118; 3865b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[106] = 27; 3866b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[107] = 119; 3867b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[107] = 8; 3868b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[108] = 119; 3869b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[108] = 22; 3870b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[109] = 120; 3871b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[109] = 4; 3872b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[110] = 120; 3873b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[110] = 17; 3874b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[111] = 120; 3875b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[111] = 31; 3876b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[112] = 121; 3877b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[112] = 13; 3878b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[113] = 121; 3879b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[113] = 26; 3880b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[114] = 122; 3881b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[114] = 8; 3882b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[115] = 122; 3883b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[115] = 21; 3884b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[116] = 123; 3885b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[116] = 2; 3886b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[117] = 123; 3887b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[117] = 15; 3888b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[118] = 123; 3889b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[118] = 29; 3890b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[119] = 124; 3891b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[119] = 10; 3892b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[120] = 124; 3893b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[120] = 23; 3894b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[121] = 125; 3895b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[121] = 4; 3896b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[122] = 125; 3897b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[122] = 17; 3898b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[123] = 125; 3899b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[123] = 31; 3900b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[124] = 126; 3901b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[124] = 12; 3902b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[125] = 126; 3903b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[125] = 25; 3904b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[126] = 127; 3905b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[126] = 6; 3906b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[127] = 127; 3907b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[127] = 19; 3908b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen A[128] = 128; 3909b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen D[128] = 0; 3910b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 3911b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen}/*mel_2_lin_init*/ 3912b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 3913b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/** 3914b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * function to be documented 3915b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @param ang : ?? 3916b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @param table : ?? 3917b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @param cs : ?? 3918b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @param sn : ?? 3919b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @return void 3920b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @callgraph 3921b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @callergraph 3922b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen */ 3923b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenstatic void get_trig(picoos_int32 ang, picoos_int32 *table, picoos_int32 *cs, 3924b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int32 *sn) 3925b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen{ 3926b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int32 i, j, k; 3927b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 3928b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen i = k = ang >> PICODSP_PI_SHIFT; /* * PICODSP_COS_TABLE_LEN2/PICODSP_FIX_SCALE2 */ 3929b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (i < 0) 3930b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen i = -i; 3931b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j = 1; 3932b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen i &= (PICODSP_COS_TABLE_LEN4 - 1); 3933b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (i > PICODSP_COS_TABLE_LEN2) 3934b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen i = PICODSP_COS_TABLE_LEN4 - i; 3935b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (i > PICODSP_COS_TABLE_LEN) { 3936b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j = -1; 3937b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen i = PICODSP_COS_TABLE_LEN2 - i; 3938b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 3939b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (j == 1) 3940b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen *cs = table[i]; 3941b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen else 3942b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen *cs = -table[i]; 3943b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 3944b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen i = k - PICODSP_COS_TABLE_LEN; 3945b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (i < 0) 3946b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen i = -i; 3947b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j = 1; 3948b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen i &= (PICODSP_COS_TABLE_LEN4 - 1); 3949b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (i > PICODSP_COS_TABLE_LEN2) 3950b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen i = PICODSP_COS_TABLE_LEN4 - i; 3951b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (i > PICODSP_COS_TABLE_LEN) { 3952b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j = -1; 3953b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen i = PICODSP_COS_TABLE_LEN2 - i; 3954b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 3955b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (j == 1) 3956b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen *sn = table[i]; 3957b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen else 3958b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen *sn = -table[i]; 3959b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen}/*get_trig*/ 3960b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 3961b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/** 3962b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * function to be documented 3963b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @param sig_inObj : sig PU internal object of the sub-object 3964b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @return void 3965b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @callgraph 3966b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @callergraph 3967b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen */ 3968b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenvoid save_transition_frame(sig_innerobj_t *sig_inObj) 3969b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen{ 3970b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int32 *tmp, *tmp2; /*for loop unrolling*/ 3971b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 3972b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (sig_inObj->voiced_p != sig_inObj->prevVoiced_p) { 3973b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->VoicTrans = sig_inObj->prevVoiced_p; /*remember last voicing transition*/ 3974b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen tmp = sig_inObj->ImpResp_p; 3975b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen tmp2 = sig_inObj->imp_p; 3976b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen FAST_DEVICE(PICODSP_FFTSIZE,*(tmp++)=*(tmp2++);); 3977b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (sig_inObj->voiced_p == 1) 3978b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->nV = 0; 3979b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen else 3980b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->nU = 0; /*to avoid problems in case of very short voiced or unvoiced parts (less than 4 frames long)*/ 3981b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 3982b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen}/*save_transition_frame*/ 3983b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 3984b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/** 3985b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * calculates an unweighted excitation window 3986b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @param sig_inObj : sig PU internal object of the sub-object 3987b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @param nextPeak : position of next peak (excitation position) 3988b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @return PICO_OK 3989b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @callgraph 3990b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @callergraph 3991b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * input 3992b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * - hop : hop size in samples 3993b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * - winlen : excitation window length 3994b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * - E : energy 3995b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * - F0 : pitch 3996b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * - nextPeak : state that remembers next excitation index 3997b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * - Fs - sampling frequency 3998b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * output 3999b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * - LocV, LocU : (MAX_EN size) location of excitation points 4000b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * - EnV, EnU : (MAX_EN size) RMS values of excitation (scaled) 4001b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * - nV, nU : (integers) number of excitation points 4002b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * - nextPeak new position of lastPeak to calculate next frame 4003b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen */ 4004b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenstatic void get_simple_excitation(sig_innerobj_t *sig_inObj, 4005b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int16 *nextPeak) 4006b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen{ 4007b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /*Define local variables*/ 4008b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int16 nI, nJ, k; 4009b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /* picoos_single InvSqrt3=(picoos_single)2/(picoos_single)sqrt(3.0); *//*constant*/ 4010b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int32 Ti, sqrtTi; 4011b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int16 hop, winlen, Fs; 4012b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_single E, F0; 4013b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int16 voiced; 4014b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_single fact; /*normalization factor*/ 4015b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_single rounding = 0.5f; 4016b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 4017b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /*Link local variables to sig object*/ 4018b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen hop = sig_inObj->hop_p; 4019b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen winlen = sig_inObj->m2_p; 4020b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen Fs = sig_inObj->Fs_p; 4021b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen E = sig_inObj->E_p; 4022b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen F0 = sig_inObj->F0_p; 4023b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen voiced = sig_inObj->voiced_p; 4024b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 4025e9f72c8954f29f10cb4feb16d328a1b5c1fd7169Jean-Michel Trivi E = (E > 5) ? 9 : (E > 1) ? 2 * E - 1 : E; 4026e9f72c8954f29f10cb4feb16d328a1b5c1fd7169Jean-Michel Trivi 4027e9f72c8954f29f10cb4feb16d328a1b5c1fd7169Jean-Michel Trivi 4028b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /* shift previous excitation window by hop samples*/ 4029b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (nI = 0; nI < sig_inObj->nV; nI++) { 4030b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->LocV[nI] = sig_inObj->LocV[nI] - hop; 4031b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 4032b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (nI = 0; nI < sig_inObj->nU; nI++) { 4033b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->LocU[nI] = sig_inObj->LocU[nI] - hop; 4034b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 4035b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 4036b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /*get rid of the voiced points that fall out of the interval*/ 4037b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen nI = 0; 4038b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen while ((sig_inObj->LocV[nI] < 0) && nI < sig_inObj->nV) 4039b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen nI++; 4040b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 4041b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (nJ = nI; nJ < sig_inObj->nV; nJ++) { 4042b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->LocV[nJ - nI] = sig_inObj->LocV[nJ]; 4043b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->EnV[nJ - nI] = sig_inObj->EnV[nJ]; 4044b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 4045b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->nV -= nI; 4046b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /*get rid of the unvoiced points that fall out of the interval */ 4047b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen nI = 0; 4048b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen while ((sig_inObj->LocU[nI] < 0) && nI < sig_inObj->nU) 4049b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen nI++; 4050b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 4051b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (nJ = nI; nJ < sig_inObj->nU; nJ++) { 4052b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->LocU[nJ - nI] = sig_inObj->LocU[nJ]; 4053b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->EnU[nJ - nI] = sig_inObj->EnU[nJ]; 4054b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 4055b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->nU -= nI; 4056b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 4057b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen *nextPeak -= hop; 4058b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k = *nextPeak; 4059b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 4060b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen fact = 3; 4061b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (voiced == 0) { /*Unvoiced*/ 4062b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 4063b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen Ti = (picoos_int32) (rounding + (picoos_single) Fs 4064b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen / (picoos_single) sig_inObj->Fuv_p); /* round Period*/ 4065b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sqrtTi = (picoos_int32) (E * sqrt((double) Fs 4066b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen / (hop * sig_inObj->Fuv_p)) * fact * PICODSP_GETEXC_K1); 4067b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen while (k < winlen) { 4068b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (k < winlen) { 4069b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->LocU[sig_inObj->nU] = k; 4070b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->EnU[sig_inObj->nU] = sqrtTi; 4071b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->nU++; 4072b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k += (picoos_int16) Ti; 4073b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 4074b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 4075b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } else { /*Voiced*/ 4076b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen Ti 4077b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen = (picoos_int32) (rounding + (picoos_single) Fs 4078b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen / (picoos_single) F0); /*Period*/ 4079b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sqrtTi = (picoos_int32) (E 4080b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * sqrt((double) Fs / (hop * sig_inObj->F0_p)) * fact 4081b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * PICODSP_GETEXC_K1); 4082b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen while (k < winlen) { 4083b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->LocV[sig_inObj->nV] = k; 4084b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->EnV[sig_inObj->nV] = sqrtTi; 4085b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen sig_inObj->nV++; 4086b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k += (picoos_int16) Ti; 4087b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 4088b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 4089b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen *nextPeak = k; 4090b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 4091b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen}/*get_simple_excitation*/ 4092b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 4093b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#ifdef __cplusplus 4094b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen} 4095b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#endif 4096b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 4097b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* end picosig2.c */ 4098