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