]> rtime.felk.cvut.cz Git - opencv.git/blob - opencv/src/cvaux/cvhog.cpp
fixed many compiler warnings and errors in x64 build in Visual Studio 2008
[opencv.git] / opencv / src / cvaux / cvhog.cpp
1 /*M///////////////////////////////////////////////////////////////////////////////////////\r
2 //\r
3 //  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\r
4 //\r
5 //  By downloading, copying, installing or using the software you agree to this license.\r
6 //  If you do not agree to this license, do not download, install,\r
7 //  copy or use the software.\r
8 //\r
9 //\r
10 //                           License Agreement\r
11 //                For Open Source Computer Vision Library\r
12 //\r
13 // Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\r
14 // Copyright (C) 2009, Willow Garage Inc., all rights reserved.\r
15 // Third party copyrights are property of their respective owners.\r
16 //\r
17 // Redistribution and use in source and binary forms, with or without modification,\r
18 // are permitted provided that the following conditions are met:\r
19 //\r
20 //   * Redistribution's of source code must retain the above copyright notice,\r
21 //     this list of conditions and the following disclaimer.\r
22 //\r
23 //   * Redistribution's in binary form must reproduce the above copyright notice,\r
24 //     this list of conditions and the following disclaimer in the documentation\r
25 //     and/or other materials provided with the distribution.\r
26 //\r
27 //   * The name of the copyright holders may not be used to endorse or promote products\r
28 //     derived from this software without specific prior written permission.\r
29 //\r
30 // This software is provided by the copyright holders and contributors "as is" and\r
31 // any express or implied warranties, including, but not limited to, the implied\r
32 // warranties of merchantability and fitness for a particular purpose are disclaimed.\r
33 // In no event shall the Intel Corporation or contributors be liable for any direct,\r
34 // indirect, incidental, special, exemplary, or consequential damages\r
35 // (including, but not limited to, procurement of substitute goods or services;\r
36 // loss of use, data, or profits; or business interruption) however caused\r
37 // and on any theory of liability, whether in contract, strict liability,\r
38 // or tort (including negligence or otherwise) arising in any way out of\r
39 // the use of this software, even if advised of the possibility of such damage.\r
40 //\r
41 //M*/\r
42 \r
43 #include "_cvaux.h"\r
44 \r
45 /****************************************************************************************\\r
46       The code below is implementation of HOG (Histogram-of-Oriented Gradients)\r
47       descriptor and object detection, introduced by Navneet Dalal and Bill Triggs.\r
48 \r
49       The computed feature vectors are compatible with the\r
50       INRIA Object Detection and Localization Toolkit\r
51       (http://pascal.inrialpes.fr/soft/olt/)\r
52 \****************************************************************************************/\r
53 \r
54 namespace cv\r
55 {\r
56 \r
57 size_t HOGDescriptor::getDescriptorSize() const\r
58 {\r
59     CV_Assert(blockSize.width % cellSize.width == 0 &&\r
60         blockSize.height % cellSize.height == 0);\r
61     CV_Assert((winSize.width - blockSize.width) % blockStride.width == 0 &&\r
62         (winSize.height - blockSize.height) % blockStride.height == 0 );\r
63     return (size_t)nbins*\r
64         (blockSize.width/cellSize.width)*\r
65         (blockSize.height/cellSize.height)*\r
66         ((winSize.width - blockSize.width)/blockStride.width + 1)*\r
67         ((winSize.height - blockSize.height)/blockStride.height + 1);\r
68 }\r
69 \r
70 double HOGDescriptor::getWinSigma() const\r
71 {\r
72     return winSigma >= 0 ? winSigma : (blockSize.width + blockSize.height)/8.;\r
73 }\r
74 \r
75 bool HOGDescriptor::checkDetectorSize() const\r
76 {\r
77     size_t detectorSize = svmDetector.size(), descriptorSize = getDescriptorSize();\r
78     return detectorSize == 0 ||\r
79         detectorSize == descriptorSize ||\r
80         detectorSize == descriptorSize + 1;\r
81 }\r
82 \r
83 void HOGDescriptor::setSVMDetector(const Vector<float>& _svmDetector)\r
84 {\r
85     svmDetector = _svmDetector;\r
86     CV_Assert( checkDetectorSize() );\r
87 }\r
88 \r
89 FileNode getFirstTopLevelNode(FileStorage& fs)\r
90 {\r
91     FileNode root = fs.root();\r
92     FileNodeIterator it = root.begin();\r
93     return it != root.end() ? *it : FileNode();\r
94 }\r
95 \r
96 bool HOGDescriptor::load(const String& filename, const String& objname)\r
97 {\r
98     FileStorage fs(filename, FileStorage::READ);\r
99     FileNode obj = !objname.empty() ? fs[objname] :\r
100         getFirstTopLevelNode(fs);\r
101     if( !obj.isMap() )\r
102         return false;\r
103     FileNodeIterator it = obj["winSize"].begin();\r
104     it >> winSize.width >> winSize.height;\r
105     it = obj["blockSize"].begin();\r
106     it >> blockSize.width >> blockSize.height;\r
107     it = obj["blockStride"].begin();\r
108     it >> blockStride.width >> blockStride.height;\r
109     it = obj["cellSize"].begin();\r
110     it >> cellSize.width >> cellSize.height;\r
111     obj["nbins"] >> nbins;\r
112     obj["derivAperture"] >> derivAperture;\r
113     obj["winSigma"] >> winSigma;\r
114     obj["histogramNormType"] >> histogramNormType;\r
115     obj["L2HysThreshold"] >> L2HysThreshold;\r
116     obj["gammaCorrection"] >> gammaCorrection;\r
117 \r
118     FileNode vecNode = obj["SVMDetector"];\r
119     if( vecNode.isSeq() )\r
120     {\r
121         vecNode >> svmDetector;\r
122         CV_Assert(checkDetectorSize());\r
123     }\r
124     return true;\r
125 }\r
126 \r
127 void HOGDescriptor::save(const String& filename, const String& objName) const\r
128 {\r
129     FileStorage fs(filename, FileStorage::WRITE);\r
130     fs << (!objName.empty() ? objName : FileStorage::getDefaultObjectName(filename)) << "{";\r
131 \r
132     fs  << "winSize" << winSize\r
133         << "blockSize" << blockSize\r
134         << "blockStride" << blockStride\r
135         << "cellSize" << cellSize\r
136         << "nbins" << nbins\r
137         << "derivAperture" << derivAperture\r
138         << "winSigma" << getWinSigma()\r
139         << "histogramNormType" << histogramNormType\r
140         << "L2HysThreshold" << L2HysThreshold\r
141         << "gammaCorrection" << gammaCorrection;\r
142     if( !svmDetector.empty() )\r
143         fs << "SVMDetector" << "[:" << svmDetector << "]";\r
144     fs << "}";\r
145 }\r
146 \r
147 void HOGDescriptor::computeGradient(const Mat& img, Mat& grad, Mat& qangle,\r
148                                     Size paddingTL, Size paddingBR) const\r
149 {\r
150     CV_Assert( img.type() == CV_8U || img.type() == CV_8UC3 );\r
151     \r
152     Size gradsize(img.cols + paddingTL.width + paddingBR.width,\r
153                   img.rows + paddingTL.height + paddingBR.height);\r
154     grad.create(gradsize, CV_32FC2);  // <magnitude*(1-alpha), magnitude*alpha>\r
155     qangle.create(gradsize, CV_8UC2); // [0..nbins-1] - quantized gradient orientation\r
156     Size wholeSize;\r
157     Point roiofs;\r
158     img.locateROI(wholeSize, roiofs);\r
159 \r
160     int i, x, y;\r
161     int cn = img.channels();\r
162 \r
163     Mat_<float> _lut(1, 256);\r
164     const float* lut = &_lut(0,0);\r
165 \r
166     if( gammaCorrection )\r
167         for( i = 0; i < 256; i++ )\r
168             _lut(0,i) = std::sqrt((float)i);\r
169     else\r
170         for( i = 0; i < 256; i++ )\r
171             _lut(0,i) = (float)i;\r
172 \r
173     AutoBuffer<int> mapbuf(gradsize.width + gradsize.height + 4);\r
174     int* xmap = (int*)mapbuf + 1;\r
175     int* ymap = xmap + gradsize.width + 2;\r
176 \r
177     const int borderType = (int)BORDER_REFLECT_101;\r
178 \r
179     for( x = -1; x < gradsize.width + 1; x++ )\r
180         xmap[x] = borderInterpolate(x - paddingTL.width + roiofs.x,\r
181                         wholeSize.width, borderType);\r
182     for( y = -1; y < gradsize.height + 1; y++ )\r
183         ymap[y] = borderInterpolate(y - paddingTL.height + roiofs.y,\r
184                         wholeSize.height, borderType);\r
185 \r
186     // x- & y- derivatives for the whole row\r
187     int width = gradsize.width;\r
188     AutoBuffer<float> _dbuf(width*4);\r
189     float* dbuf = _dbuf;\r
190     Mat Dx(1, width, CV_32F, dbuf);\r
191     Mat Dy(1, width, CV_32F, dbuf + width);\r
192     Mat Mag(1, width, CV_32F, dbuf + width*2);\r
193     Mat Angle(1, width, CV_32F, dbuf + width*3);\r
194 \r
195     int _nbins = nbins;\r
196     float angleScale = (float)(_nbins/CV_PI);\r
197 \r
198     for( y = 0; y < gradsize.height; y++ )\r
199     {\r
200         const uchar* imgPtr = img.data + img.step*ymap[y];\r
201         const uchar* prevPtr = img.data + img.step*ymap[y-1];\r
202         const uchar* nextPtr = img.data + img.step*ymap[y+1];\r
203         float* gradPtr = (float*)grad.ptr(y);\r
204         uchar* qanglePtr = (uchar*)qangle.ptr(y);\r
205         \r
206         if( cn == 1 )\r
207         {\r
208             for( x = 0; x < width; x++ )\r
209             {\r
210                 int x1 = xmap[x];\r
211                 dbuf[x] = (float)(lut[imgPtr[xmap[x+1]]] - lut[imgPtr[xmap[x-1]]]);\r
212                 dbuf[width + x] = (float)(lut[nextPtr[x1]] - lut[prevPtr[x1]]);\r
213             }\r
214         }\r
215         else\r
216         {\r
217             for( x = 0; x < width; x++ )\r
218             {\r
219                 int x1 = xmap[x]*3;\r
220                 const uchar* p2 = imgPtr + xmap[x+1]*3;\r
221                 const uchar* p0 = imgPtr + xmap[x-1]*3;\r
222                 float dx0, dy0, dx, dy, mag0, mag;\r
223 \r
224                 dx0 = lut[p2[2]] - lut[p0[2]];\r
225                 dy0 = lut[nextPtr[x1+2]] - lut[prevPtr[x1+2]];\r
226                 mag0 = dx0*dx0 + dy0*dy0;\r
227                 \r
228                 dx = lut[p2[1]] - lut[p0[1]];\r
229                 dy = lut[nextPtr[x1+1]] - lut[prevPtr[x1+1]];\r
230                 mag = dx*dx + dy*dy;\r
231                 \r
232                 if( mag0 < mag )\r
233                 {\r
234                     dx0 = dx;\r
235                     dy0 = dy;\r
236                     mag0 = mag;\r
237                 }\r
238                 \r
239                 dx = lut[p2[0]] - lut[p0[0]];\r
240                 dy = lut[nextPtr[x1]] - lut[prevPtr[x1]];\r
241                 mag = dx*dx + dy*dy;\r
242                 \r
243                 if( mag0 < mag )\r
244                 {\r
245                     dx0 = dx;\r
246                     dy0 = dy;\r
247                     mag0 = mag;\r
248                 }\r
249 \r
250                 dbuf[x] = dx0;\r
251                 dbuf[x+width] = dy0;\r
252             }\r
253         }\r
254         \r
255         cartToPolar( Dx, Dy, Mag, Angle, false );\r
256 \r
257         for( x = 0; x < width; x++ )\r
258         {\r
259             float mag = dbuf[x+width*2], angle = dbuf[x+width*3]*angleScale - 0.5f;\r
260             int hidx = cvFloor(angle);\r
261             angle -= hidx;\r
262             if( hidx < 0 )\r
263                 hidx += _nbins;\r
264             else if( hidx >= _nbins )\r
265                 hidx -= _nbins;\r
266             assert( (unsigned)hidx < (unsigned)_nbins );\r
267 \r
268             qanglePtr[x*2] = (uchar)hidx;\r
269             hidx++;\r
270             hidx &= hidx < _nbins ? -1 : 0;\r
271             qanglePtr[x*2+1] = (uchar)hidx;\r
272             gradPtr[x*2] = mag*(1.f - angle);\r
273             gradPtr[x*2+1] = mag*angle;\r
274         }\r
275     }\r
276 }\r
277 \r
278 void HOGDescriptor::normalizeBlockHistogram(Vector<float>& _hist) const\r
279 {\r
280     float* hist = &_hist[0];\r
281     size_t i, sz = _hist.size();\r
282 \r
283     float sum = 0;\r
284     for( i = 0; i < sz; i++ )\r
285         sum += hist[i]*hist[i];\r
286     float scale = 1.f/(std::sqrt(sum)+sz*0.1f), thresh = (float)L2HysThreshold;\r
287     for( i = 0, sum = 0; i < sz; i++ )\r
288     {\r
289         hist[i] = std::min(hist[i]*scale, thresh);\r
290         sum += hist[i]*hist[i];\r
291     }\r
292     scale = 1.f/(std::sqrt(sum)+1e-3f);\r
293     for( i = 0; i < sz; i++ )\r
294         hist[i] *= scale;\r
295 }\r
296 \r
297 \r
298 struct HOGCache\r
299 {\r
300     struct BlockData\r
301     {\r
302         int histOfs;\r
303         Point imgOffset;\r
304     };\r
305 \r
306     struct PixData\r
307     {\r
308         size_t gradOfs, qangleOfs;\r
309         int histOfs[4];\r
310         float histWeights[4];\r
311         float gradWeight;\r
312     };\r
313 \r
314     HOGCache();\r
315     HOGCache(const HOGDescriptor* descriptor,\r
316         const Mat& img, Size paddingTL, Size paddingBR,\r
317         bool useCache, Size cacheStride);\r
318     virtual ~HOGCache() {};\r
319     virtual void init(const HOGDescriptor* descriptor,\r
320         const Mat& img, Size paddingTL, Size paddingBR,\r
321         bool useCache, Size cacheStride);\r
322 \r
323     Size windowsInImage(Size imageSize, Size winStride) const;\r
324     Rect getWindow(Size imageSize, Size winStride, int idx) const;\r
325 \r
326     const float* getBlock(Point pt, float* buf);\r
327     \r
328     Vector<PixData> pixData;\r
329     Vector<BlockData> blockData;\r
330 \r
331     bool useCache;\r
332     Vector<int> ymaxCached;\r
333     Size winSize, cacheStride;\r
334     Size nblocks, ncells;\r
335     int blockHistogramSize;\r
336     int count1, count2, count4;\r
337     Point imgoffset;\r
338     Mat_<float> blockCache;\r
339     Mat_<uchar> blockCacheFlags;\r
340 \r
341     Mat grad, qangle;\r
342     const HOGDescriptor* descriptor;\r
343 };\r
344 \r
345 \r
346 HOGCache::HOGCache()\r
347 {\r
348     useCache = false;\r
349     blockHistogramSize = count1 = count2 = count4 = 0;\r
350     descriptor = 0;\r
351 }\r
352 \r
353 HOGCache::HOGCache(const HOGDescriptor* _descriptor,\r
354         const Mat& _img, Size _paddingTL, Size _paddingBR,\r
355         bool _useCache, Size _cacheStride)\r
356 {\r
357     init(_descriptor, _img, _paddingTL, _paddingBR, _useCache, _cacheStride);\r
358 }\r
359 \r
360 void HOGCache::init(const HOGDescriptor* _descriptor,\r
361         const Mat& _img, Size _paddingTL, Size _paddingBR,\r
362         bool _useCache, Size _cacheStride)\r
363 {\r
364     descriptor = _descriptor;\r
365     cacheStride = _cacheStride;\r
366     useCache = _useCache;\r
367 \r
368     descriptor->computeGradient(_img, grad, qangle, _paddingTL, _paddingBR);\r
369     imgoffset = _paddingTL;\r
370 \r
371     winSize = descriptor->winSize;\r
372     Size blockSize = descriptor->blockSize;\r
373     Size blockStride = descriptor->blockStride;\r
374     Size cellSize = descriptor->cellSize;\r
375     Size winSize = descriptor->winSize;\r
376     int i, j, nbins = descriptor->nbins;\r
377     int rawBlockSize = blockSize.width*blockSize.height;\r
378 \r
379     nblocks = Size((winSize.width - blockSize.width)/blockStride.width + 1,\r
380                    (winSize.height - blockSize.height)/blockStride.height + 1);\r
381     ncells = Size(blockSize.width/cellSize.width, blockSize.height/cellSize.height);\r
382     blockHistogramSize = ncells.width*ncells.height*nbins;\r
383 \r
384     if( useCache )\r
385     {\r
386         Size cacheSize((grad.cols - blockSize.width)/cacheStride.width+1,\r
387                        (winSize.height/cacheStride.height)+1);\r
388         blockCache.create(cacheSize.height, cacheSize.width*blockHistogramSize);\r
389         blockCacheFlags.create(cacheSize);\r
390         size_t i, cacheRows = blockCache.rows;\r
391         ymaxCached.resize(cacheRows);\r
392         for( i = 0; i < cacheRows; i++ )\r
393             ymaxCached[i] = -1;\r
394     }\r
395 \r
396     Mat_<float> weights(blockSize);\r
397     float sigma = (float)descriptor->getWinSigma();\r
398     float scale = 1.f/(sigma*sigma*2);\r
399 \r
400     for(i = 0; i < blockSize.height; i++)\r
401         for(j = 0; j < blockSize.width; j++)\r
402         {\r
403             float di = i - blockSize.height*0.5f;\r
404             float dj = j - blockSize.width*0.5f;\r
405             weights(i,j) = std::exp(-(di*di + dj*dj)*scale);\r
406         }\r
407 \r
408     blockData.resize(nblocks.width*nblocks.height);\r
409     pixData.resize(rawBlockSize*3);\r
410 \r
411     // Initialize 2 lookup tables, pixData & blockData.\r
412     // Here is why:\r
413     //\r
414     // The detection algorithm runs in 4 nested loops (at each pyramid layer):\r
415     //  loop over the windows within the input image\r
416     //    loop over the blocks within each window\r
417     //      loop over the cells within each block\r
418     //        loop over the pixels in each cell\r
419     //\r
420     // As each of the loops runs over a 2-dimensional array,\r
421     // we could get 8(!) nested loops in total, which is very-very slow.\r
422     //\r
423     // To speed the things up, we do the following:\r
424     //   1. loop over windows is unrolled in the HOGDescriptor::{compute|detect} methods;\r
425     //         inside we compute the current search window using getWindow() method.\r
426     //         Yes, it involves some overhead (function call + couple of divisions),\r
427     //         but it's tiny in fact.\r
428     //   2. loop over the blocks is also unrolled. Inside we use pre-computed blockData[j]\r
429     //         to set up gradient and histogram pointers.\r
430     //   3. loops over cells and pixels in each cell are merged\r
431     //       (since there is no overlap between cells, each pixel in the block is processed once)\r
432     //      and also unrolled. Inside we use PixData[k] to access the gradient values and\r
433     //      update the histogram\r
434     //\r
435     count1 = count2 = count4 = 0;\r
436     for( j = 0; j < blockSize.width; j++ )\r
437         for( i = 0; i < blockSize.height; i++ )\r
438         {\r
439             PixData* data = 0;\r
440             float cellX = (j+0.5f)/cellSize.width - 0.5f;\r
441             float cellY = (i+0.5f)/cellSize.height - 0.5f;\r
442             int icellX0 = cvFloor(cellX);\r
443             int icellY0 = cvFloor(cellY);\r
444             int icellX1 = icellX0 + 1, icellY1 = icellY0 + 1;\r
445             cellX -= icellX0;\r
446             cellY -= icellY0;\r
447             \r
448             if( (unsigned)icellX0 < (unsigned)ncells.width &&\r
449                 (unsigned)icellX1 < (unsigned)ncells.width )\r
450             {\r
451                 if( (unsigned)icellY0 < (unsigned)ncells.height &&\r
452                     (unsigned)icellY1 < (unsigned)ncells.height )\r
453                 {\r
454                     data = &pixData[rawBlockSize*2 + (count4++)];\r
455                     data->histOfs[0] = (icellX0*ncells.height + icellY0)*nbins;\r
456                     data->histWeights[0] = (1.f - cellX)*(1.f - cellY);\r
457                     data->histOfs[1] = (icellX1*ncells.height + icellY0)*nbins;\r
458                     data->histWeights[1] = cellX*(1.f - cellY);\r
459                     data->histOfs[2] = (icellX0*ncells.height + icellY1)*nbins;\r
460                     data->histWeights[2] = (1.f - cellX)*cellY;\r
461                     data->histOfs[3] = (icellX1*ncells.height + icellY1)*nbins;\r
462                     data->histWeights[3] = cellX*cellY;\r
463                 }\r
464                 else\r
465                 {\r
466                     data = &pixData[rawBlockSize + (count2++)];\r
467                     if( (unsigned)icellY0 < (unsigned)ncells.height )\r
468                     {\r
469                         icellY1 = icellY0;\r
470                         cellY = 1.f - cellY;\r
471                     }\r
472                     data->histOfs[0] = (icellX0*ncells.height + icellY1)*nbins;\r
473                     data->histWeights[0] = (1.f - cellX)*cellY;\r
474                     data->histOfs[1] = (icellX1*ncells.height + icellY1)*nbins;\r
475                     data->histWeights[1] = cellX*cellY;\r
476                     data->histOfs[2] = data->histOfs[3] = 0;\r
477                     data->histWeights[2] = data->histWeights[3] = 0;\r
478                 }\r
479             }\r
480             else\r
481             {\r
482                 if( (unsigned)icellX0 < (unsigned)ncells.width )\r
483                 {\r
484                     icellX1 = icellX0;\r
485                     cellX = 1.f - cellX;\r
486                 }\r
487 \r
488                 if( (unsigned)icellY0 < (unsigned)ncells.height &&\r
489                     (unsigned)icellY1 < (unsigned)ncells.height )\r
490                 {\r
491                     data = &pixData[rawBlockSize + (count2++)];\r
492                     data->histOfs[0] = (icellX1*ncells.height + icellY0)*nbins;\r
493                     data->histWeights[0] = cellX*(1.f - cellY);\r
494                     data->histOfs[1] = (icellX1*ncells.height + icellY1)*nbins;\r
495                     data->histWeights[1] = cellX*cellY;\r
496                     data->histOfs[2] = data->histOfs[3] = 0;\r
497                     data->histWeights[2] = data->histWeights[3] = 0;\r
498                 }\r
499                 else\r
500                 {\r
501                     data = &pixData[count1++];\r
502                     if( (unsigned)icellY0 < (unsigned)ncells.height )\r
503                     {\r
504                         icellY1 = icellY0;\r
505                         cellY = 1.f - cellY;\r
506                     }\r
507                     data->histOfs[0] = (icellX1*ncells.height + icellY1)*nbins;\r
508                     data->histWeights[0] = cellX*cellY;\r
509                     data->histOfs[1] = data->histOfs[2] = data->histOfs[3] = 0;\r
510                     data->histWeights[1] = data->histWeights[2] = data->histWeights[3] = 0;\r
511                 }\r
512             }\r
513             data->gradOfs = (grad.cols*i + j)*2;\r
514             data->qangleOfs = (qangle.cols*i + j)*2;\r
515             data->gradWeight = weights(i,j);\r
516         }\r
517 \r
518     assert( count1 + count2 + count4 == rawBlockSize );\r
519     // defragment pixData\r
520     for( j = 0; j < count2; j++ )\r
521         pixData[j + count1] = pixData[j + rawBlockSize];\r
522     for( j = 0; j < count4; j++ )\r
523         pixData[j + count1 + count2] = pixData[j + rawBlockSize*2];\r
524     count2 += count1;\r
525     count4 += count2;\r
526 \r
527     // initialize blockData\r
528     for( j = 0; j < nblocks.width; j++ )\r
529         for( i = 0; i < nblocks.height; i++ )\r
530         {\r
531             BlockData& data = blockData[j*nblocks.height + i];\r
532             data.histOfs = (j*nblocks.height + i)*blockHistogramSize;\r
533             data.imgOffset = Point(j*blockStride.width,i*blockStride.height);\r
534         }\r
535 }\r
536 \r
537 \r
538 const float* HOGCache::getBlock(Point pt, float* buf)\r
539 {\r
540     float* blockHist = buf;\r
541     assert(descriptor != 0);\r
542 \r
543     Size blockSize = descriptor->blockSize;\r
544     pt += imgoffset;\r
545 \r
546     CV_Assert( (unsigned)pt.x <= (unsigned)(grad.cols - blockSize.width) &&\r
547                (unsigned)pt.y <= (unsigned)(grad.rows - blockSize.height) );\r
548     \r
549     if( useCache )\r
550     {\r
551         CV_Assert( pt.x % cacheStride.width == 0 &&\r
552                    pt.y % cacheStride.height == 0 );\r
553         Point cacheIdx(pt.x/cacheStride.width,\r
554                       (pt.y/cacheStride.height) % blockCache.rows);\r
555         if( pt.y != ymaxCached[cacheIdx.y] )\r
556         {\r
557             Mat_<uchar> cacheRow = blockCacheFlags.row(cacheIdx.y);\r
558             cacheRow = (uchar)0;\r
559             ymaxCached[cacheIdx.y] = pt.y;\r
560         }\r
561 \r
562         blockHist = &blockCache[cacheIdx.y][cacheIdx.x*blockHistogramSize];\r
563         uchar& computedFlag = blockCacheFlags(cacheIdx.y, cacheIdx.x);\r
564         if( computedFlag != 0 )\r
565             return blockHist;\r
566         computedFlag = (uchar)1; // set it at once, before actual computing\r
567     }\r
568 \r
569     int k, C1 = count1, C2 = count2, C4 = count4;\r
570     const float* gradPtr = (const float*)(grad.data + grad.step*pt.y) + pt.x*2;\r
571     const uchar* qanglePtr = qangle.data + qangle.step*pt.y + pt.x*2;\r
572 \r
573     CV_Assert( blockHist != 0 );\r
574 \r
575     for( k = 0; k < blockHistogramSize; k++ )\r
576         blockHist[k] = 0.f;\r
577     \r
578     const PixData* _pixData = &pixData[0];\r
579 \r
580     for( k = 0; k < C1; k++ )\r
581     {\r
582         const PixData& pk = _pixData[k];\r
583         const float* a = gradPtr + pk.gradOfs;\r
584         float w = pk.gradWeight*pk.histWeights[0];\r
585         const uchar* h = qanglePtr + pk.qangleOfs;\r
586         int h0 = h[0], h1 = h[1];\r
587         float* hist = blockHist + pk.histOfs[0];\r
588         float t0 = hist[h0] + a[0]*w;\r
589         float t1 = hist[h1] + a[1]*w;\r
590         hist[h0] = t0; hist[h1] = t1;\r
591     }\r
592 \r
593     for( ; k < C2; k++ )\r
594     {\r
595         const PixData& pk = _pixData[k];\r
596         const float* a = gradPtr + pk.gradOfs;\r
597         float w, t0, t1, a0 = a[0], a1 = a[1];\r
598         const uchar* h = qanglePtr + pk.qangleOfs;\r
599         int h0 = h[0], h1 = h[1];\r
600         \r
601         float* hist = blockHist + pk.histOfs[0];\r
602         w = pk.gradWeight*pk.histWeights[0];\r
603         t0 = hist[h0] + a0*w;\r
604         t1 = hist[h1] + a1*w;\r
605         hist[h0] = t0; hist[h1] = t1;\r
606         \r
607         hist = blockHist + pk.histOfs[1];\r
608         w = pk.gradWeight*pk.histWeights[1];\r
609         t0 = hist[h0] + a0*w;\r
610         t1 = hist[h1] + a1*w;\r
611         hist[h0] = t0; hist[h1] = t1;\r
612     }\r
613 \r
614     for( ; k < C4; k++ )\r
615     {\r
616         const PixData& pk = _pixData[k];\r
617         const float* a = gradPtr + pk.gradOfs;\r
618         float w, t0, t1, a0 = a[0], a1 = a[1];\r
619         const uchar* h = qanglePtr + pk.qangleOfs;\r
620         int h0 = h[0], h1 = h[1];\r
621         \r
622         float* hist = blockHist + pk.histOfs[0];\r
623         w = pk.gradWeight*pk.histWeights[0];\r
624         t0 = hist[h0] + a0*w;\r
625         t1 = hist[h1] + a1*w;\r
626         hist[h0] = t0; hist[h1] = t1;\r
627         \r
628         hist = blockHist + pk.histOfs[1];\r
629         w = pk.gradWeight*pk.histWeights[1];\r
630         t0 = hist[h0] + a0*w;\r
631         t1 = hist[h1] + a1*w;\r
632         hist[h0] = t0; hist[h1] = t1;\r
633 \r
634         hist = blockHist + pk.histOfs[2];\r
635         w = pk.gradWeight*pk.histWeights[2];\r
636         t0 = hist[h0] + a0*w;\r
637         t1 = hist[h1] + a1*w;\r
638         hist[h0] = t0; hist[h1] = t1;\r
639 \r
640         hist = blockHist + pk.histOfs[3];\r
641         w = pk.gradWeight*pk.histWeights[3];\r
642         t0 = hist[h0] + a0*w;\r
643         t1 = hist[h1] + a1*w;\r
644         hist[h0] = t0; hist[h1] = t1;\r
645     }\r
646 \r
647     // normalize the block histogram\r
648     Vector<float> d(blockHist, (size_t)blockHistogramSize);\r
649     descriptor->normalizeBlockHistogram(d);\r
650 \r
651     return blockHist;\r
652 }\r
653 \r
654 \r
655 Size HOGCache::windowsInImage(Size imageSize, Size winStride) const\r
656 {\r
657     return Size((imageSize.width - winSize.width)/winStride.width + 1,\r
658                 (imageSize.height - winSize.height)/winStride.height + 1);\r
659 }\r
660 \r
661 Rect HOGCache::getWindow(Size imageSize, Size winStride, int idx) const\r
662 {\r
663     int nwindowsX = (imageSize.width - winSize.width)/winStride.width + 1;\r
664     int y = idx / nwindowsX;\r
665     int x = idx - nwindowsX*y;\r
666     return Rect( x*winStride.width, y*winStride.height, winSize.width, winSize.height );\r
667 }\r
668 \r
669 \r
670 void HOGDescriptor::compute(const Mat& img, Vector<float>& descriptors,\r
671                             Size winStride, Size padding,\r
672                             const Vector<Point>& locations) const\r
673 {\r
674     if( winStride == Size() )\r
675         winStride = cellSize;\r
676     Size cacheStride(gcd(winStride.width, blockStride.width),\r
677                      gcd(winStride.height, blockStride.height));\r
678     size_t nwindows = locations.size();\r
679     padding.width = (int)alignSize(std::max(padding.width, 0), cacheStride.width);\r
680     padding.height = (int)alignSize(std::max(padding.height, 0), cacheStride.height);\r
681     Size paddedImgSize(img.cols + padding.width*2, img.rows + padding.height*2);\r
682     \r
683     HOGCache cache(this, img, padding, padding, nwindows == 0, cacheStride);\r
684 \r
685     if( !nwindows )\r
686         nwindows = cache.windowsInImage(paddedImgSize, winStride).area();\r
687 \r
688     const HOGCache::BlockData* blockData = &cache.blockData[0];\r
689 \r
690     int nblocks = cache.nblocks.area();\r
691     int blockHistogramSize = cache.blockHistogramSize;\r
692     size_t dsize = getDescriptorSize();\r
693     descriptors.resize(dsize*nwindows);\r
694 \r
695     for( size_t i = 0; i < nwindows; i++ )\r
696     {\r
697         float* descriptor = &descriptors[i*dsize];\r
698        \r
699         Point pt0;\r
700         if( !locations.empty() )\r
701         {\r
702             pt0 = locations[i];\r
703             if( pt0.x < -padding.width || pt0.x > img.cols + padding.width - winSize.width ||\r
704                 pt0.y < -padding.height || pt0.y > img.rows + padding.height - winSize.height )\r
705                 continue;\r
706         }\r
707         else\r
708         {\r
709             pt0 = cache.getWindow(paddedImgSize, winStride, (int)i).tl() - Point(padding);\r
710             CV_Assert(pt0.x % cacheStride.width == 0 && pt0.y % cacheStride.height == 0);\r
711         }\r
712 \r
713         for( int j = 0; j < nblocks; j++ )\r
714         {\r
715             const HOGCache::BlockData& bj = blockData[j];\r
716             Point pt = pt0 + bj.imgOffset;\r
717 \r
718             float* dst = descriptor + bj.histOfs;\r
719             const float* src = cache.getBlock(pt, dst);\r
720             if( src != dst )\r
721                 for( int k = 0; k < blockHistogramSize; k++ )\r
722                     dst[k] = src[k];\r
723         }\r
724     }\r
725 }\r
726 \r
727 \r
728 void HOGDescriptor::detect(const Mat& img,\r
729     Vector<Point>& hits, double hitThreshold,\r
730     Size winStride, Size padding, const Vector<Point>& locations) const\r
731 {\r
732     hits.clear();\r
733     if( svmDetector.empty() )\r
734         return;\r
735     \r
736     if( winStride == Size() )\r
737         winStride = cellSize;\r
738     Size cacheStride(gcd(winStride.width, blockStride.width),\r
739                      gcd(winStride.height, blockStride.height));\r
740     size_t nwindows = locations.size();\r
741     padding.width = (int)alignSize(std::max(padding.width, 0), cacheStride.width);\r
742     padding.height = (int)alignSize(std::max(padding.height, 0), cacheStride.height);\r
743     Size paddedImgSize(img.cols + padding.width*2, img.rows + padding.height*2);\r
744     \r
745     HOGCache cache(this, img, padding, padding, nwindows == 0, cacheStride);\r
746 \r
747     if( !nwindows )\r
748         nwindows = cache.windowsInImage(paddedImgSize, winStride).area();\r
749 \r
750     const HOGCache::BlockData* blockData = &cache.blockData[0];\r
751 \r
752     int nblocks = cache.nblocks.area();\r
753     int blockHistogramSize = cache.blockHistogramSize;\r
754     size_t dsize = getDescriptorSize();\r
755 \r
756     double rho = svmDetector.size() > dsize ? svmDetector[dsize] : 0;\r
757     Vector<float> blockHist(blockHistogramSize);\r
758 \r
759     for( size_t i = 0; i < nwindows; i++ )\r
760     {\r
761         Point pt0;\r
762         if( !locations.empty() )\r
763         {\r
764             pt0 = locations[i];\r
765             if( pt0.x < -padding.width || pt0.x > img.cols + padding.width - winSize.width ||\r
766                 pt0.y < -padding.height || pt0.y > img.rows + padding.height - winSize.height )\r
767                 continue;\r
768         }\r
769         else\r
770         {\r
771             pt0 = cache.getWindow(paddedImgSize, winStride, (int)i).tl() - Point(padding);\r
772             CV_Assert(pt0.x % cacheStride.width == 0 && pt0.y % cacheStride.height == 0);\r
773         }\r
774         double s = rho;\r
775         const float* svmVec = &svmDetector[0];\r
776         int j, k;\r
777         for( j = 0; j < nblocks; j++, svmVec += blockHistogramSize )\r
778         {\r
779             const HOGCache::BlockData& bj = blockData[j];\r
780             Point pt = pt0 + bj.imgOffset;\r
781 \r
782             const float* vec = cache.getBlock(pt, &blockHist[0]);\r
783             for( k = 0; k <= blockHistogramSize - 4; k += 4 )\r
784                 s += vec[k]*svmVec[k] + vec[k+1]*svmVec[k+1] +\r
785                     vec[k+2]*svmVec[k+2] + vec[k+3]*svmVec[k+3];\r
786             for( ; k < blockHistogramSize; k++ )\r
787                 s += vec[k]*svmVec[k];\r
788         }\r
789         if( s >= hitThreshold )\r
790             hits.push_back(pt0);\r
791     }\r
792 }\r
793 \r
794 \r
795 struct SimilarRects\r
796 {\r
797     SimilarRects(double _eps) : eps(_eps) {}\r
798     inline bool operator()(const Rect& r1, const Rect& r2) const\r
799     {\r
800         double delta = eps*(std::min(r1.width, r2.width) + std::min(r1.height, r2.height))*0.5;\r
801         return std::abs(r1.x - r2.x) <= delta &&\r
802             std::abs(r1.y - r2.y) <= delta &&\r
803             std::abs(r1.x + r1.width - r2.x - r2.width) <= delta &&\r
804             std::abs(r1.y + r1.height - r2.y - r2.height) <= delta;\r
805     }\r
806     double eps;\r
807 };\r
808 \r
809 struct HOGThreadData\r
810 {\r
811     Vector<Rect> rectangles;\r
812     Vector<Point> locations;\r
813     Mat smallerImgBuf;\r
814 };\r
815 \r
816 void HOGDescriptor::detectMultiScale(\r
817     const Mat& img, Vector<Rect>& foundLocations,\r
818     double hitThreshold, Size winStride, Size padding,\r
819     double scale0, int groupThreshold) const\r
820 {\r
821     double scale = 1.;\r
822     foundLocations.clear();\r
823     int i, levels = 0;\r
824     const int maxLevels = 64;\r
825 \r
826     int t, nthreads = getNumThreads();\r
827     Vector<HOGThreadData> threadData(nthreads);\r
828 \r
829     for( t = 0; t < nthreads; t++ )\r
830         threadData[t].smallerImgBuf.create(img.size(), img.type());\r
831 \r
832     Vector<double> levelScale(maxLevels);\r
833     for( levels = 0; levels < maxLevels; levels++ )\r
834     {\r
835         levelScale[levels] = scale;\r
836         if( cvRound(img.cols/scale) < winSize.width ||\r
837             cvRound(img.rows/scale) < winSize.height ||\r
838             scale0 <= 1 )\r
839             break;\r
840         scale *= scale0;\r
841     }\r
842     levels = std::max(levels, 1);\r
843     levelScale.resize(levels);\r
844 \r
845     {\r
846 #ifdef _OPENMP\r
847     #pragma omp parallel for num_threads(nthreads) schedule(dynamic)\r
848 #endif // _OPENMP\r
849     for( i = 0; i < levels; i++ )\r
850     {\r
851         HOGThreadData& tdata = threadData[getThreadNum()];\r
852         double scale = levelScale[i];\r
853         Size sz(cvRound(img.cols/scale), cvRound(img.rows/scale));\r
854         Mat smallerImg(sz, img.type(), tdata.smallerImgBuf.data);\r
855         if( sz == img.size() )\r
856             smallerImg = Mat(sz, img.type(), img.data, img.step);\r
857         else\r
858             resize(img, smallerImg, sz);\r
859         detect(smallerImg, tdata.locations, hitThreshold, winStride, padding);\r
860         Size scaledWinSize = Size(cvRound(winSize.width*scale), cvRound(winSize.height*scale));\r
861         for( size_t j = 0; j < tdata.locations.size(); j++ )\r
862             tdata.rectangles.push_back(Rect(\r
863                 cvRound(tdata.locations[j].x*scale),\r
864                 cvRound(tdata.locations[j].y*scale),\r
865                 scaledWinSize.width, scaledWinSize.height));\r
866     }\r
867     }\r
868 \r
869     for( t = 0; t < nthreads; t++ )\r
870     {\r
871         HOGThreadData& tdata = threadData[t];\r
872         std::copy(tdata.rectangles.begin(), tdata.rectangles.end(),\r
873             std::back_inserter(foundLocations));\r
874     }\r
875 \r
876     if( groupThreshold <= 0 )\r
877         return;\r
878 \r
879     Vector<int> labels;\r
880     int nclasses = partition(foundLocations, labels, SimilarRects(0.2));\r
881     Vector<Rect> rrects(nclasses);\r
882     Vector<int> rweights(nclasses, 0);\r
883     int nlabels = (int)labels.size();\r
884     for( i = 0; i < nlabels; i++ )\r
885     {\r
886         int cls = labels[i];\r
887         rrects[cls].x += foundLocations[i].x;\r
888         rrects[cls].y += foundLocations[i].y;\r
889         rrects[cls].width += foundLocations[i].width;\r
890         rrects[cls].height += foundLocations[i].height;\r
891         rweights[cls]++;\r
892     }\r
893     foundLocations.clear();\r
894     for( i = 0; i < nclasses; i++ )\r
895     {\r
896         Rect r = rrects[i];\r
897         if( rweights[i] <= groupThreshold )\r
898             continue;\r
899         float s = 1.f/rweights[i];\r
900         foundLocations.push_back(\r
901             Rect(cvRound(r.x*s), cvRound(r.y*s), cvRound(r.width*s), cvRound(r.height*s)));\r
902     }\r
903 }\r
904 \r
905 Vector<float> HOGDescriptor::getDefaultPeopleDetector()\r
906 {\r
907     static const float detector[] = {\r
908        0.05359386f, -0.14721455f, -0.05532170f, 0.05077307f,\r
909        0.11547081f, -0.04268804f, 0.04635834f, -0.05468199f, 0.08232084f,\r
910        0.10424068f, -0.02294518f, 0.01108519f, 0.01378693f, 0.11193510f,\r
911        0.01268418f, 0.08528346f, -0.06309239f, 0.13054633f, 0.08100729f,\r
912        -0.05209739f, -0.04315529f, 0.09341384f, 0.11035026f, -0.07596218f,\r
913        -0.05517511f, -0.04465296f, 0.02947334f, 0.04555536f,\r
914        -3.55954492e-003f, 0.07818956f, 0.07730991f, 0.07890715f, 0.06222893f,\r
915        0.09001380f, -0.03574381f, 0.03414327f, 0.05677258f, -0.04773581f,\r
916        0.03746637f, -0.03521175f, 0.06955440f, -0.03849038f, 0.01052293f,\r
917        0.01736112f, 0.10867710f, 0.08748853f, 3.29739624e-003f, 0.10907028f,\r
918        0.07913758f, 0.10393070f, 0.02091867f, 0.11594022f, 0.13182420f,\r
919        0.09879354f, 0.05362710f, -0.06745391f, -7.01260753e-003f,\r
920        5.24702156e-003f, 0.03236255f, 0.01407916f, 0.02207983f, 0.02537322f,\r
921        0.04547948f, 0.07200756f, 0.03129894f, -0.06274468f, 0.02107014f,\r
922        0.06035208f, 0.08636236f, 4.53164103e-003f, 0.02193363f, 0.02309801f,\r
923        0.05568166f, -0.02645093f, 0.04448695f, 0.02837519f, 0.08975694f,\r
924        0.04461516f, 0.08975355f, 0.07514391f, 0.02306982f, 0.10410084f,\r
925        0.06368385f, 0.05943464f, 4.58420580e-003f, 0.05220337f, 0.06675851f,\r
926        0.08358569f, 0.06712101f, 0.06559004f, -0.03930482f, -9.15936660e-003f,\r
927        -0.05897915f, 0.02816453f, 0.05032348f, 0.06780671f, 0.03377650f,\r
928        -6.09417039e-004f, -0.01795146f, -0.03083684f, -0.01302475f,\r
929        -0.02972313f, 7.88706727e-003f, -0.03525961f, -2.50397739e-003f,\r
930        0.05245084f, 0.11791293f, -0.02167498f, 0.05299332f, 0.06640524f,\r
931        0.05190265f, -8.27316567e-003f, 0.03033127f, 0.05842173f,\r
932        -4.01050318e-003f, -6.25105947e-003f, 0.05862958f, -0.02465461f,\r
933        0.05546781f, -0.08228195f, -0.07234028f, 0.04640540f, -0.01308254f,\r
934        -0.02506191f, 0.03100746f, -0.04665651f, -0.04591486f, 0.02949927f,\r
935        0.06035462f, 0.02244646f, -0.01698639f, 0.01040041f, 0.01131170f,\r
936        0.05419579f, -0.02130277f, -0.04321722f, -0.03665198f, 0.01126490f,\r
937        -0.02606488f, -0.02228328f, -0.02255680f, -0.03427236f,\r
938        -7.75165204e-003f, -0.06195229f, 8.21638294e-003f, 0.09535975f,\r
939        -0.03709979f, -0.06942501f, 0.14579427f, -0.05448192f, -0.02055904f,\r
940        0.05747357f, 0.02781788f, -0.07077577f, -0.05178314f, -0.10429011f,\r
941        -0.11235505f, 0.07529039f, -0.07559302f, -0.08786739f, 0.02983843f,\r
942        0.02667585f, 0.01382199f, -0.01797496f, -0.03141199f, -0.02098101f,\r
943        0.09029204f, 0.04955018f, 0.13718739f, 0.11379953f, 1.80019124e-003f,\r
944        -0.04577610f, -1.11108483e-003f, -0.09470536f, -0.11596080f,\r
945        0.04489342f, 0.01784211f, 3.06850672e-003f, 0.10781866f,\r
946        3.36498418e-003f, -0.10842580f, -0.07436839f, -0.10535070f,\r
947        -0.01866805f, 0.16057891f, -5.07316366e-003f, -0.04295658f,\r
948        -5.90488780e-003f, 8.82003549e-003f, -0.01492646f, -0.05029279f,\r
949        -0.12875880f, 8.78831954e-004f, -0.01297184f, -0.07592774f,\r
950        -0.02668831f, -6.93787413e-004f, 0.02406698f, -0.01773298f,\r
951        -0.03855745f, -0.05877856f, 0.03259695f, 0.12826584f, 0.06292590f,\r
952        -4.10733931e-003f, 0.10996531f, 0.01332991f, 0.02088735f, 0.04037504f,\r
953        -0.05210760f, 0.07760046f, 0.06399347f, -0.05751930f, -0.10053057f,\r
954        0.07505023f, -0.02139782f, 0.01796176f, 2.34400877e-003f, -0.04208319f,\r
955        0.07355055f, 0.05093350f, -0.02996780f, -0.02219072f, 0.03355330f,\r
956        0.04418742f, -0.05580705f, -0.05037573f, -0.04548179f, 0.01379514f,\r
957        0.02150671f, -0.02194211f, -0.13682702f, 0.05464972f, 0.01608082f,\r
958        0.05309116f, 0.04701022f, 1.33690401e-003f, 0.07575664f, 0.09625306f,\r
959        8.92647635e-003f, -0.02819123f, 0.10866830f, -0.03439325f,\r
960        -0.07092371f, -0.06004780f, -0.02712298f, -7.07467366e-003f,\r
961        -0.01637020f, 0.01336790f, -0.10313606f, 0.04906582f, -0.05732445f,\r
962        -0.02731079f, 0.01042235f, -0.08340668f, 0.03686501f, 0.06108340f,\r
963        0.01322748f, -0.07809529f, 0.03774724f, -0.03413248f, -0.06096525f,\r
964        -0.04212124f, -0.07982176f, -1.25973229e-003f, -0.03045501f,\r
965        -0.01236493f, -0.06312395f, 0.04789570f, -0.04602066f, 0.08576570f,\r
966        0.02521080f, 0.02988098f, 0.10314583f, 0.07060035f, 0.04520544f,\r
967        -0.04426654f, 0.13146530f, 0.08386490f, 0.02164590f, -2.12280243e-003f,\r
968        -0.03686353f, -0.02074944f, -0.03829959f, -0.01530596f, 0.02689708f,\r
969        0.11867401f, -0.06043470f, -0.02785023f, -0.04775074f, 0.04878745f,\r
970        0.06350956f, 0.03494788f, 0.01467400f, 1.17890188e-003f, 0.04379614f,\r
971        2.03681854e-003f, -0.03958609f, -0.01072688f, 6.43705716e-003f,\r
972        0.02996500f, -0.03418507f, -0.01960307f, -0.01219154f,\r
973        -4.37000440e-003f, -0.02549453f, 0.02646318f, -0.01632513f,\r
974        6.46516960e-003f, -0.01929734f, 4.78711911e-003f, 0.04962371f,\r
975        0.03809111f, 0.07265724f, 0.05758125f, -0.03741554f, 0.01648608f,\r
976        -8.45285598e-003f, 0.03996826f, -0.08185477f, 0.02638875f,\r
977        -0.04026615f, -0.02744674f, -0.04071517f, 1.05096330e-003f,\r
978        -0.04741232f, -0.06733172f, 8.70434940e-003f, -0.02192543f,\r
979        1.35350740e-003f, -0.03056974f, -0.02975521f, -0.02887780f,\r
980        -0.01210713f, -0.04828526f, -0.09066251f, -0.09969629f, -0.03665164f,\r
981        -8.88111943e-004f, -0.06826669f, -0.01866150f, -0.03627640f,\r
982        -0.01408288f, 0.01874239f, -0.02075835f, 0.09145175f, -0.03547291f,\r
983        0.05396780f, 0.04198981f, 0.01301925f, -0.03384354f, -0.12201976f,\r
984        0.06830920f, -0.03715654f, 9.55848210e-003f, 5.05685573e-003f,\r
985        0.05659294f, 3.90764466e-003f, 0.02808490f, -0.05518097f, -0.03711621f,\r
986        -0.02835565f, -0.04420464f, -0.01031947f, 0.01883466f,\r
987        -8.49525444e-003f, -0.09419250f, -0.01269387f, -0.02133371f,\r
988        -0.10190815f, -0.07844430f, 2.43644323e-003f, -4.09610150e-003f,\r
989        0.01202551f, -0.06452291f, -0.10593818f, -0.02464746f, -0.02199699f,\r
990        -0.07401930f, 0.07285886f, 8.87513801e-004f, 9.97662079e-003f,\r
991        8.46779719e-003f, 0.03730333f, -0.02905126f, 0.03573337f, -0.04393689f,\r
992        -0.12014472f, 0.03176554f, -2.76015815e-003f, 0.10824566f, 0.05090732f,\r
993        -3.30179278e-003f, -0.05123822f, 5.04784798e-003f, -0.05664124f,\r
994        -5.99415926e-003f, -0.05341901f, -0.01221393f, 0.01291318f,\r
995        9.91760660e-003f, -7.56987557e-003f, -0.06193124f, -2.24549137e-003f,\r
996        0.01987562f, -0.02018840f, -0.06975540f, -0.06601523f, -0.03349112f,\r
997        -0.08910118f, -0.03371435f, -0.07406893f, -0.02248047f, -0.06159951f,\r
998        2.77751544e-003f, -0.05723337f, -0.04792468f, 0.07518548f,\r
999        2.77279224e-003f, 0.04211938f, 0.03100502f, 0.05278448f, 0.03954679f,\r
1000        -0.03006846f, -0.03851741f, -0.02792403f, -0.02875333f, 0.01531280f,\r
1001        0.02186953f, -0.01989829f, 2.50679464e-003f, -0.10258728f,\r
1002        -0.04785743f, -0.02887216f, 3.85063468e-003f, 0.01112236f,\r
1003        8.29218887e-003f, -0.04822981f, -0.04503597f, -0.03713100f,\r
1004        -0.06988008f, -0.11002295f, -2.69209221e-003f, 1.85383670e-003f,\r
1005        -0.05921049f, -0.06105053f, -0.08458050f, -0.04527602f,\r
1006        8.90329306e-004f, -0.05875023f, -2.68602883e-003f, -0.01591195f,\r
1007        0.03631859f, 0.05493166f, 0.07300330f, 5.53333294e-003f, 0.06400407f,\r
1008        0.01847740f, -5.76280477e-003f, -0.03210877f, 4.25160583e-003f,\r
1009        0.01166520f, -1.44864211e-003f, 0.02253744f, -0.03367080f, 0.06983195f,\r
1010        -4.22323542e-003f, -8.89401045e-003f, -0.07943393f, 0.05199728f,\r
1011        0.06065201f, 0.04133492f, 1.44032843e-003f, -0.09585235f, -0.03964731f,\r
1012        0.04232114f, 0.01750465f, -0.04487902f, -7.59733608e-003f, 0.02011171f,\r
1013        0.04673622f, 0.09011173f, -0.07869188f, -0.04682482f, -0.05080139f,\r
1014        -3.99383716e-003f, -0.05346331f, 0.01085723f, -0.03599333f,\r
1015        -0.07097908f, 0.03551549f, 0.02680387f, 0.03471529f, 0.01790393f,\r
1016        0.05471273f, 9.62048303e-003f, -0.03180215f, 0.05864431f, 0.02330614f,\r
1017        0.01633144f, -0.05616681f, -0.10245429f, -0.08302189f, 0.07291322f,\r
1018        -0.01972590f, -0.02619633f, -0.02485327f, -0.04627592f,\r
1019        1.48853404e-003f, 0.05514185f, -0.01270860f, -0.01948900f, 0.06373586f,\r
1020        0.05002292f, -0.03009798f, 8.76216311e-003f, -0.02474238f,\r
1021        -0.05504891f, 1.74034527e-003f, -0.03333667f, 0.01524987f, 0.11663762f,\r
1022        -1.32344989e-003f, -0.06608453f, 0.05687166f, -6.89525274e-004f,\r
1023        -0.04402352f, 0.09450210f, -0.04222684f, -0.05360983f, 0.01779531f,\r
1024        0.02561388f, -0.11075410f, -8.77790991e-003f, -0.01099504f,\r
1025        -0.10380266f, 0.03103457f, -0.02105741f, -0.07371717f, 0.05146710f,\r
1026        0.10581432f, -0.08617968f, -0.02892107f, 0.01092199f, 0.14551543f,\r
1027        -2.24320893e-003f, -0.05818033f, -0.07390742f, 0.05701261f,\r
1028        0.12937020f, -0.04986651f, 0.10182415f, 0.05028650f, 0.12515625f,\r
1029        0.09175041f, 0.06404983f, 0.01523394f, 0.09460562f, 0.06106631f,\r
1030        -0.14266998f, -0.02926703f, 0.02762171f, 0.02164151f,\r
1031        -9.58488265e-004f, -0.04231362f, -0.09866509f, 0.04322244f,\r
1032        0.05872034f, -0.04838847f, 0.06319253f, 0.02443798f, -0.03606876f,\r
1033        9.38737206e-003f, 0.04289991f, -0.01027411f, 0.08156885f, 0.08751175f,\r
1034        -0.13191354f, 8.16054735e-003f, -0.01452161f, 0.02952677f, 0.03615945f,\r
1035        -2.09128903e-003f, 0.02246693f, 0.09623287f, 0.09412123f, -0.02924758f,\r
1036        -0.07815186f, -0.02203079f, -2.02566991e-003f, 0.01094733f,\r
1037        -0.01442332f, 0.02838561f, 0.11882371f, 7.28798332e-003f, -0.10345965f,\r
1038        0.07561217f, -0.02049661f, 4.44177445e-003f, 0.01609347f, -0.04893158f,\r
1039        -0.08758243f, -7.67420698e-003f, 0.08862378f, 0.06098121f, 0.06565887f,\r
1040        7.32981879e-003f, 0.03558407f, -0.03874352f, -0.02490055f,\r
1041        -0.06771075f, 0.09939223f, -0.01066077f, 0.01382995f, -0.07289080f,\r
1042        7.47184316e-003f, 0.10621431f, -0.02878659f, 0.02383525f, -0.03274646f,\r
1043        0.02137008f, 0.03837290f, 0.02450992f, -0.04296818f, -0.02895143f,\r
1044        0.05327370f, 0.01499020f, 0.04998732f, 0.12938657f, 0.09391870f,\r
1045        0.04292390f, -0.03359194f, -0.06809492f, 0.01125796f, 0.17290455f,\r
1046        -0.03430733f, -0.06255233f, -0.01813114f, 0.11726857f, -0.06127599f,\r
1047        -0.08677909f, -0.03429872f, 0.04684938f, 0.08161420f, 0.03538774f,\r
1048        0.01833884f, 0.11321855f, 0.03261845f, -0.04826299f, 0.01752407f,\r
1049        -0.01796414f, -0.10464549f, -3.30041884e-003f, 2.29343961e-004f,\r
1050        0.01457292f, -0.02132982f, -0.02602923f, -9.87351313e-003f,\r
1051        0.04273872f, -0.02103316f, -0.07994065f, 0.02614958f, -0.02111666f,\r
1052        -0.06964913f, -0.13453490f, -0.06861878f, -6.09341264e-003f,\r
1053        0.08251446f, 0.15612499f, 2.46531400e-003f, 8.88424646e-003f,\r
1054        -0.04152999f, 0.02054853f, 0.05277953f, -0.03087788f, 0.02817579f,\r
1055        0.13939077f, 0.07641046f, -0.03627627f, -0.03015098f, -0.04041540f,\r
1056        -0.01360690f, -0.06227205f, -0.02738223f, 0.13577610f, 0.15235767f,\r
1057        -0.05392922f, -0.11175954f, 0.02157129f, 0.01146481f, -0.05264937f,\r
1058        -0.06595174f, -0.02749175f, 0.11812254f, 0.17404149f, -0.06137035f,\r
1059        -0.11003478f, -0.01351621f, -0.01745916f, -0.08577441f, -0.04469909f,\r
1060        -0.06106115f, 0.10559758f, 0.20806813f, -0.09174948f, 7.09621934e-004f,\r
1061        0.03579374f, 0.07215115f, 0.02221742f, 0.01827742f, -7.90785067e-003f,\r
1062        0.01489554f, 0.14519960f, -0.06425831f, 0.02990399f, -1.80181325e-003f,\r
1063        -0.01401528f, -0.04171134f, -3.70530109e-003f, -0.09090481f,\r
1064        0.09520713f, 0.08845516f, -0.02651753f, -0.03016730f, 0.02562448f,\r
1065        0.03563816f, -0.03817881f, 0.01433385f, 0.02256983f, 0.02872120f,\r
1066        0.01001934f, -0.06332260f, 0.04338406f, 0.07001807f, -0.04705722f,\r
1067        -0.07318907f, 0.02630457f, 0.03106382f, 0.06648342f, 0.10913180f,\r
1068        -0.01630815f, 0.02910308f, 0.02895109f, 0.08040254f, 0.06969310f,\r
1069        0.06797734f, 6.08639978e-003f, 4.16588830e-003f, 0.08926726f,\r
1070        -0.03123648f, 0.02700146f, 0.01168734f, -0.01631594f, 4.61015804e-003f,\r
1071        8.51359498e-003f, -0.03544224f, 0.03571994f, 4.29766066e-003f,\r
1072        -0.01970077f, -8.79793242e-003f, 0.09607988f, 0.01544222f,\r
1073        -0.03923707f, 0.07308586f, 0.06061262f, 1.31683104e-004f,\r
1074        -7.98222050e-003f, 0.02399261f, -0.06084389f, -0.02743429f,\r
1075        -0.05475523f, -0.04131311f, 0.03559756f, 0.03055342f, 0.02981433f,\r
1076        0.14860515f, 0.01766787f, 0.02945257f, 0.04898238f, 0.01026922f,\r
1077        0.02811658f, 0.08267091f, 0.02732154f, -0.01237693f, 0.11760156f,\r
1078        0.03802063f, -0.03309754f, 5.24957618e-003f, -0.02460510f, 0.02691451f,\r
1079        0.05399988f, -0.10133506f, 0.06385437f, -0.01818005f, 0.02259503f,\r
1080        0.03573135f, 0.01042848f, -0.04153402f, -0.04043029f, 0.01643575f,\r
1081        0.08326677f, 4.61383024e-004f, -0.05308095f, -0.08536223f,\r
1082        -1.61011645e-003f, -0.02163720f, -0.01783352f, 0.03859637f,\r
1083        0.08498885f, -0.01725216f, 0.08625131f, 0.10995087f, 0.09177644f,\r
1084        0.08498347f, 0.07646490f, 0.05580502f, 0.02693516f, 0.09996913f,\r
1085        0.09070327f, 0.06667200f, 0.05873008f, -0.02247842f, 0.07772321f,\r
1086        0.12408436f, 0.12629253f, -8.41997913e-004f, 0.01477783f, 0.09165990f,\r
1087        -2.98401713e-003f, -0.06466447f, -0.07057302f, 2.09516948e-004f,\r
1088        0.02210209f, -0.02158809f, -0.08602506f, -0.02284836f,\r
1089        4.01876355e-003f, 9.56660323e-003f, -0.02073978f, -0.04635138f,\r
1090        -7.59423291e-003f, -0.01377393f, -0.04559359f, -0.13284740f,\r
1091        -0.08671406f, -0.03654395f, 0.01142869f, 0.03287891f, -0.04392983f,\r
1092        0.06142959f, 0.17710890f, 0.10385257f, 0.01329137f, 0.10067633f,\r
1093        0.12450829f, -0.04476709f, 0.09049144f, 0.04589312f, 0.11167907f,\r
1094        0.08587538f, 0.04767583f, 1.67188141e-003f, 0.02359802f, -0.03808852f,\r
1095        0.03126272f, -0.01919029f, -0.05698918f, -0.02365112f, -0.06519032f,\r
1096        -0.05599358f, -0.07097308f, -0.03301812f, -0.04719102f, -0.02566297f,\r
1097        0.01324074f, -0.09230672f, -0.05518232f, -0.04712864f, -0.03380903f,\r
1098        -0.06719479f, 0.01183908f, -0.09326738f, 0.01642865f, 0.03789867f,\r
1099        -6.61567831e-003f, 0.07796386f, 0.07246574f, 0.04706347f, -0.02523437f,\r
1100        -0.01696830f, -0.08068866f, 0.06030888f, 0.10527060f, -0.06611756f,\r
1101        0.02977346f, 0.02621830f, 0.01913855f, -0.08479366f, -0.06322418f,\r
1102        -0.13570616f, -0.07644490f, 9.31900274e-003f, -0.08095149f,\r
1103        -0.10197903f, -0.05204025f, 0.01413151f, -0.07800411f, -0.01885122f,\r
1104        -0.07509381f, -0.10136326f, -0.05212355f, -0.09944065f,\r
1105        -1.33606605e-003f, -0.06342617f, -0.04178550f, -0.12373723f,\r
1106        -0.02832736f, -0.06057501f, 0.05830070f, 0.07604282f, -0.06462587f,\r
1107        8.02447461e-003f, 0.11580125f, 0.12332212f, 0.01978462f,\r
1108        -2.72378162e-003f, 0.05850752f, -0.04674481f, 0.05148062f,\r
1109        -2.62542837e-003f, 0.11253355f, 0.09893716f, 0.09785093f, -0.04659257f,\r
1110        -0.01102429f, -0.07002308f, 0.03088913f, -0.02565549f, -0.07671449f,\r
1111        3.17443861e-003f, -0.10783514f, -0.02314270f, -0.11089555f,\r
1112        -0.01024768f, 0.03116021f, -0.04964825f, 0.02281825f, 5.50005678e-003f,\r
1113        -0.08427856f, -0.14685495f, -0.07719755f, -0.13342668f, -0.04525511f,\r
1114        -0.09914210f, 0.02588859f, 0.03469279f, 0.04664020f, 0.11688190f,\r
1115        0.09647275f, 0.10857815f, -0.01448726f, 0.04299758f, -0.06763151f,\r
1116        1.33257592e-003f, 0.14331576f, 0.07574340f, 0.09166205f, 0.05674926f,\r
1117        0.11325553f, -0.01106494f, 0.02062161f, -0.11484840f, -0.07492137f,\r
1118        -0.02864293f, -0.01275638f, -0.06946032f, -0.10101652f, -0.04113498f,\r
1119        -0.02214783f, -0.01273942f, -0.07480393f, -0.10556041f, -0.07622112f,\r
1120        -0.09988393f, -0.11453961f, -0.12073903f, -0.09412795f, -0.07146588f,\r
1121        -0.04054537f, -0.06127083f, 0.04221122f, 0.07688113f, 0.04099256f,\r
1122        0.12663734f, 0.14683802f, 0.21761774f, 0.12525328f, 0.18431792f,\r
1123        -1.66402373e-003f, 2.37777247e-003f, 0.01445475f, 0.03509416f,\r
1124        0.02654697f, 0.01716739f, 0.05374011f, 0.02944174f, 0.11323927f,\r
1125        -0.01485456f, -0.01611330f, -1.85554172e-003f, -0.01708549f,\r
1126        -0.05435753f, -0.05302101f, 0.05260378f, -0.03582945f,\r
1127        -3.42867890e-004f, 1.36076682e-003f, -0.04436073f, -0.04228432f,\r
1128        0.03281291f, -0.05480836f, -0.10197772f, -0.07206279f, -0.10741059f,\r
1129        -0.02366946f, 0.10278475f, -2.74783419e-003f, -0.03242477f,\r
1130        0.02308955f, 0.02835869f, 0.10348799f, 0.19580358f, 0.10252027f,\r
1131        0.08039929f, 0.05525554f, -0.13250865f, -0.14395352f, 3.13586881e-003f,\r
1132        -0.03387071f, 8.94669443e-003f, 0.05406157f, -4.97324532e-003f,\r
1133        -0.01189114f, 2.82919413e-004f, -0.03901557f, -0.04898705f,\r
1134        0.02164520f, -0.01382906f, -0.01850416f, 0.01869347f, -0.02450060f,\r
1135        0.02291678f, 0.08196463f, 0.03309153f, -0.10629974f, 0.02473924f,\r
1136        0.05344394f, -0.02404823f, -0.03243643f, -5.55244600e-003f,\r
1137        -0.08009996f, 0.02811539f, 0.04235742f, 0.01859004f, 0.04902123f,\r
1138        -0.01438252f, -0.01526853f, 0.02044195f, -0.05008660f, 0.04244113f,\r
1139        0.07611816f, 0.04950470f, -0.06020549f, -4.26026015e-003f, 0.13133512f,\r
1140        -0.01438738f, -0.01958807f, -0.04044152f, -0.12425045f,\r
1141        2.84353318e-003f, -0.05042776f, -0.09121484f, 7.34345755e-003f,\r
1142        0.09388847f, 0.11800314f, 4.72295098e-003f, 4.44378285e-003f,\r
1143        -0.07984917f, -0.03613737f, 0.04490915f, -0.02246483f, 0.04681071f,\r
1144        0.05240871f, 0.02157206f, -0.04603431f, -0.01197929f, -0.02748779f,\r
1145        0.13621049f, 0.08812155f, -0.07802048f, 4.86458559e-003f, -0.01598836f,\r
1146        0.01024450f, -0.03463517f, -0.02304239f, -0.08692665f, 0.06655128f,\r
1147        0.05785803f, -0.12640759f, 0.02307472f, 0.07337402f, 0.07525434f,\r
1148        0.04943763f, -0.02241034f, -0.09978238f, 0.14487994f, -0.06570521f,\r
1149        -0.07855482f, 0.02830222f, -5.29603509e-004f, -0.04669895f,\r
1150        -0.11822784f, -0.12246452f, -0.15365660f, -0.02969127f, 0.08078201f,\r
1151        0.13512598f, 0.11505685f, 0.04740673f, 0.01376022f, -0.05852978f,\r
1152        -0.01537809f, -0.05541119f, 0.02491065f, -0.02870786f, 0.02760978f,\r
1153        0.23836176f, 0.22347429f, 0.10306466f, -0.06919070f, -0.10132039f,\r
1154        -0.20198342f, -0.05040560f, 0.27163076f, 0.36987007f, 0.34540465f,\r
1155        0.29095781f, 0.05649706f, 0.04125737f, 0.07505883f, -0.02737836f,\r
1156        -8.43431335e-003f, 0.07368195f, 0.01653876f, -0.09402955f,\r
1157        -0.09574359f, 0.01474337f, -0.07128561f, -0.03460737f, 0.11438941f,\r
1158        0.13752601f, -0.06385452f, -0.06310338f, 8.19548313e-003f, 0.11622470f,\r
1159        5.05133113e-003f, -0.07602754f, 0.06695660f, 0.25723928f, 0.09037900f,\r
1160        0.28826267f, 0.13165380f, -0.05312614f, -0.02137198f, -0.03442232f,\r
1161        -0.06255679f, 0.03899667f, 0.18391028f, 0.26016650f, 0.03374462f,\r
1162        0.01860465f, 0.19077586f, 0.18160543f, 3.43634398e-003f, -0.03036782f,\r
1163        0.19683038f, 0.35378191f, 0.24968483f, -0.03222649f, 0.28972381f,\r
1164        0.43091634f, 0.30778357f, 0.02335266f, -0.09877399f, -6.85245218e-003f,\r
1165        0.08945240f, -0.08150686f, 0.02792493f, 0.24806842f, 0.17338486f,\r
1166        0.06231801f, -0.10432383f, -0.16653322f, -0.13197899f, -0.08531576f,\r
1167        -0.19271527f, -0.13536365f, 0.22240199f, 0.39219588f, 0.26597717f,\r
1168        -0.01231649f, 0.01016179f, 0.13379875f, 0.12018334f, -0.04852953f,\r
1169        -0.07915270f, 0.07036012f, 3.87723115e-003f, -0.06126805f,\r
1170        -0.15015170f, -0.11406515f, -0.08556531f, -0.07429333f, -0.16115491f,\r
1171        0.13214062f, 0.25691369f, 0.05697750f, 0.06861912f, -6.02903729e-003f,\r
1172        -7.94562511e-003f, 0.04799571f, 0.06695165f, -0.01926842f, 0.06206308f,\r
1173        0.13450983f, -0.06381495f, -2.98370165e-003f, -0.03482971f,\r
1174        7.53991678e-003f, 0.03895611f, 0.11464261f, 0.01669971f,\r
1175        8.27818643e-003f, -7.49160210e-003f, -0.11712562f, -0.10650621f,\r
1176        -0.10353880f, -0.04994106f, -7.65618810e-004f, 0.03023767f,\r
1177        -0.04759270f, -0.07302686f, -0.05825012f, -0.13156348f, -0.10639747f,\r
1178        -0.19393684f, -0.09973683f, -0.07918908f, 4.63177625e-004f,\r
1179        -6.61382044e-004f, 0.15853868f, 0.08561199f, -0.07660093f,\r
1180        -0.08015265f, -0.06164073f, 0.01882577f, -7.29908410e-004f,\r
1181        0.06840892f, 0.03843764f, 0.20274927f, 0.22028814f, -5.26101235e-003f,\r
1182        0.01452435f, -0.06331623f, 0.02865064f, 0.05673740f, 0.12171564f,\r
1183        0.03837196f, 0.03555467f, -0.02662914f, -0.10280123f, -0.06526285f,\r
1184        -0.11066351f, -0.08988424f, -0.10103678f, 8.10526591e-003f,\r
1185        5.95238712e-003f, 0.02617721f, -0.01705742f, -0.10897956f,\r
1186        -0.08004991f, -0.11271993f, -0.06185647f, -0.06103712f, 0.01597041f,\r
1187        -0.05923606f, 0.09410726f, 0.22858568f, 0.03263380f, 0.06772990f,\r
1188        -0.09003516f, 0.01017870f, 0.01931688f, 0.08628357f, -0.01430009f,\r
1189        0.10954945f, 0.16612452f, -0.02434544f, -0.03310068f, -0.04236627f,\r
1190        0.01212392f, -6.15046406e-003f, 0.06954194f, 0.03015283f, 0.01787957f,\r
1191        0.02781667f, -0.05561153f, -8.96244217e-003f, -0.04971489f,\r
1192        0.07510284f, 0.01775282f, 0.05889897f, -0.07981427f, 0.03647643f,\r
1193        -3.73833324e-003f, -0.08894575f, -0.06429435f, -0.08068276f,\r
1194        0.03567704f, -0.07131936f, -7.21910037e-003f, -0.09566668f,\r
1195        0.17886090f, 0.14911725f, 0.02070032f, -0.05017120f, -0.04992622f,\r
1196        0.01570143f, -0.09906903f, 0.06456193f, 0.15329507f, 0.18820767f,\r
1197        0.11689861f, -0.01178513f, -0.02225163f, -0.01905318f, 0.10271224f,\r
1198        -7.27029052e-003f, 0.11664233f, 0.14796902f, 0.07771893f, 0.02400013f,\r
1199        -0.05361797f, -0.01972888f, 0.01376177f, 0.06740040f, -0.06525395f,\r
1200        0.05726178f, -0.02404981f, -0.14018567f, -0.02074987f, -0.04621970f,\r
1201        -0.04688627f, -0.01842059f, 0.07722727f, -0.04852883f, 0.01529004f,\r
1202        -0.19639495f, 0.10817073f, 0.03795860f, -0.09435206f, -0.07984378f,\r
1203        -0.03383440f, 0.11081333f, 0.02237366f, 0.12703256f, 0.21613893f,\r
1204        0.02918790f, 4.66472283e-003f, -0.10274266f, -0.04854131f,\r
1205        -3.46305710e-003f, 0.08652268f, 0.02251546f, 0.09636052f, 0.17180754f,\r
1206        -0.09272388f, 4.59174305e-004f, -0.11723048f, -0.12210111f,\r
1207        -0.15547538f, 0.07218186f, -0.05297846f, 0.03779940f, 0.05150875f,\r
1208        -0.03802310f, 0.03870645f, -0.15250699f, -0.08696499f, -0.02021560f,\r
1209        0.04118926f, -0.15177974f, 0.01577647f, 0.10249301f, 7.50041893e-003f,\r
1210        0.01721806f, -0.06828983f, -0.02397596f, -0.06598977f, -0.04317593f,\r
1211        -0.08064980f, 6.66632550e-003f, 0.03333484f, 0.07093620f, 0.08231064f,\r
1212        -0.06577903f, -0.06698844f, -0.06984019f, -0.06508023f, -0.14145090f,\r
1213        -0.02393239f, 0.06485303f, 8.83263443e-003f, 0.09251080f, -0.07557579f,\r
1214        -0.05067699f, -0.09798748f, -0.06703258f, -0.14056294f, 0.03245994f,\r
1215        0.12554143f, 0.01761621f, 0.12980327f, -0.04081950f, -0.11906909f,\r
1216        -0.14813015f, -0.08376863f, -0.12200681f, 0.04988137f, 0.05424247f,\r
1217        -3.90952639e-003f, 0.03255733f, -0.12717837f, -0.07461493f,\r
1218        -0.05703964f, -0.01736189f, -0.08026433f, -0.05433894f, -0.01719359f,\r
1219        0.02886275f, 0.01772653f, -0.09163518f, 3.57789593e-003f, -0.10129993f,\r
1220        -0.02653764f, -0.08131415f, -0.03847986f, -7.62157550e-004f,\r
1221        0.06486648f, 0.19675669f, -0.04919156f, -0.07059129f, -0.04857785f,\r
1222        -0.01042383f, -0.08328653f, 0.03660302f, -0.03696846f, 0.04969259f,\r
1223        0.08241162f, -0.12514858f, -0.06122676f, -0.03750202f,\r
1224        6.52989605e-003f, -0.10247213f, 0.02568346f, 4.51781414e-003f,\r
1225        -0.03734229f, -0.01131264f, -0.05412074f, 8.89345480e-004f,\r
1226        -0.12388977f, -0.05959237f, -0.12418608f, -0.06151643f, -0.07310260f,\r
1227        0.02441575f, 0.07023528f, -0.07548289f, -7.57147965e-004f,\r
1228        -0.09061348f, -0.08112976f, -0.06920306f, 9.54394229e-003f,\r
1229        -0.01219902f, 1.21273217e-003f, -8.88989680e-003f, -0.08309301f,\r
1230        -0.04552661f, -0.10739882f, -0.05691034f, -0.13928030f, 0.09027749f,\r
1231        0.15123098f, 0.03175976f, 0.17763577f, 3.29913251e-004f, 0.05151888f,\r
1232        -0.09844074f, -0.09475287f, -0.08571247f, 0.16241577f, 0.19336018f,\r
1233        8.57454538e-003f, 0.11474732f, -0.01493934f, 0.03352379f, -0.08966240f,\r
1234        -0.02322310f, 0.02663568f, 0.05448750f, -0.03536883f, -0.07210463f,\r
1235        -0.06807277f, -0.03121621f, -0.05932408f, -0.17282860f, -0.15873498f,\r
1236        -0.04956378f, 0.01603377f, -0.12385946f, 0.13878587f, 0.21468069f,\r
1237        0.13510075f, 0.20992437f, 0.08845878f, 0.08104013f, 0.03754176f,\r
1238        0.12173114f, 0.11103114f, 0.10643122f, 0.13941477f, 0.11640384f,\r
1239        0.14786847f, 0.01218238f, 0.01160753f, 0.03547940f, 0.08794311f,\r
1240        -0.01695384f, -0.07692261f, -0.08236158f, 6.79194089e-003f,\r
1241        -0.02458403f, 0.13022894f, 0.10953187f, 0.09857773f, 0.04735930f,\r
1242        -0.04353498f, -0.15173385f, -0.17904443f, -0.10450364f, -0.13418166f,\r
1243        -0.06633098f, -0.03170381f, -0.06839000f, -0.11350126f, -0.06983913f,\r
1244        0.19083543f, 0.17604128f, 0.07730632f, 0.10022651f, 0.36428109f,\r
1245        0.28291923f, 0.12688625f, 0.15942036f, 0.14064661f, -0.11201853f,\r
1246        -0.13969108f, -0.09088077f, -0.14107047f, 0.05117374f,\r
1247        -2.63348082e-003f, -0.10794610f, -0.09715455f, -0.05284977f,\r
1248        0.01565668f, 0.05031200f, 0.07021113f, -0.02963028f, 0.01766960f,\r
1249        0.08333644f, -0.03211382f, 4.90096770e-003f, 0.05186674f, -0.05045737f,\r
1250        -0.09624767f, -0.02525997f, 0.06916669f, 0.01213916f, 0.05333899f,\r
1251        -0.03443280f, -0.10055527f, -0.06291115f, 5.42851724e-003f,\r
1252        -6.30360236e-003f, 0.02270257f, -0.01769792f, 0.03273688f, 0.07746078f,\r
1253        7.77099328e-003f, 0.05041346f, 0.01648103f, -0.02321534f, -0.09930186f,\r
1254        -0.02293853f, 0.02034990f, -0.08324204f, 0.08510064f, -0.03732836f,\r
1255        -0.06465405f, -0.06086946f, 0.13680504f, -0.11469388f, -0.03896406f,\r
1256        -0.07142810f, 2.67581246e-003f, -0.03639632f, -0.09849060f,\r
1257        -0.11014334f, 0.17489147f, 0.17610909f, -0.16091567f, -0.07248894f,\r
1258        0.01567141f, 0.23742996f, 0.07552249f, -0.06270349f, -0.07303379f,\r
1259        0.25442186f, 0.16903116f, -0.08168741f, -0.05913896f, -0.03954096f,\r
1260        6.81776879e-003f, -0.05615319f, -0.07303037f, -0.12176382f,\r
1261        0.12385108f, 0.22084464f, -0.05543206f, -0.03310431f, 0.05731593f,\r
1262        0.19481890f, 0.04016430f, -0.06480758f, -0.12353460f, 0.18733442f,\r
1263        -0.09631214f, -0.11192076f, 0.12404587f, 0.15671748f, 0.19256128f,\r
1264        0.10895617f, 0.03391477f, -0.13032004f, -0.05626907f, -0.09025607f,\r
1265        0.23485197f, 0.27812332f, 0.26725492f, 0.07255980f, 0.16565137f,\r
1266        0.22388470f, 0.07441066f, -0.21003133f, -0.08075339f, -0.15031935f,\r
1267        0.07023834f, 0.10872041f, 0.18156518f, 0.20037253f, 0.13571967f,\r
1268        -0.11915682f, -0.11131983f, -0.18878011f, 0.06074620f, 0.20578890f,\r
1269        0.12413109f, 0.03930207f, 0.29176015f, 0.29502738f, 0.27856228f,\r
1270        -0.01803601f, 0.16646385f, 0.19268319f, 0.01900682f, 0.06026287f,\r
1271        2.35868432e-003f, 0.01558199f, 0.02707230f, 0.11383014f, 0.12103992f,\r
1272        0.03907350f, 0.04637353f, 0.09020995f, 0.11919726f, -3.63007211e-003f,\r
1273        0.02220155f, 0.10336831f, 0.17351882f, 0.12259731f, 0.18983354f,\r
1274        0.15736865f, 0.01160725f, -0.01690723f, -9.69582412e-004f, 0.07213813f,\r
1275        0.01161613f, 0.17864859f, 0.24486147f, 0.18208991f, 0.20177495f,\r
1276        0.05972528f, -8.93934630e-003f, -0.02316955f, 0.14436610f, 0.14114498f,\r
1277        0.05520950f, 0.06353590f, -0.19124921f, 0.10174713f, 0.29414919f,\r
1278        0.26448128f, 0.09344960f, 0.15284036f, 0.19797507f, 0.11369792f,\r
1279        -0.12722753f, -0.21396367f, -0.02008235f, -0.06566695f, -0.01662150f,\r
1280        -0.03937003f, 0.04778343f, 0.05017274f, -0.02299062f, -0.20208496f,\r
1281        -0.06395898f, 0.13721776f, 0.22544557f, 0.14888357f, 0.08687132f,\r
1282        0.27088094f, 0.32206613f, 0.09782200f, -0.18523243f, -0.17232181f,\r
1283        -0.01041531f, 0.04008654f, 0.04199702f, -0.08081299f, -0.03755421f,\r
1284        -0.04809646f, -0.05222081f, -0.21709201f, -0.06622940f, 0.02945281f,\r
1285        -0.04600435f, -0.05256077f, -0.08432942f, 0.02848100f, 0.03490564f,\r
1286        8.28621630e-003f, -0.11051246f, -0.11210597f, -0.01998289f,\r
1287        -0.05369405f, -0.08869293f, -0.18799506f, -0.05436598f, -0.05011634f,\r
1288        -0.05419716f, -0.06151857f, -0.10827805f, 0.04346735f, 0.04016083f,\r
1289        0.01520820f, -0.12173316f, -0.04880285f, -0.01101406f, 0.03250847f,\r
1290        -0.06009551f, -0.03082932f, -0.02295134f, -0.06856834f, -0.08775249f,\r
1291        -0.23793389f, -0.09174541f, -0.05538322f, -0.04321031f, -0.11874759f,\r
1292        -0.04221844f, -0.06070468f, 0.01194489f, 0.02608565f, -0.03892140f,\r
1293        -0.01643151f, -0.02602034f, -0.01305472f, 0.03920100f, -0.06514261f,\r
1294        0.01126918f, -6.27710763e-003f, -0.02720047f, -0.11133634f,\r
1295        0.03300330f, 0.02398472f, 0.04079665f, -0.10564448f, 0.05966159f,\r
1296        0.01195221f, -0.03179441f, -0.01692590f, -0.06177841f, 0.01841576f,\r
1297        -5.51078189e-003f, -0.06821765f, -0.03191888f, -0.09545476f,\r
1298        0.03030550f, -0.04896152f, -0.02914624f, -0.13283344f, -0.04783419f,\r
1299        6.07836898e-003f, -0.01449538f, -0.13358212f, -0.09687774f,\r
1300        -0.02813793f, 0.01213498f, 0.06650011f, -0.02039067f, 0.13356198f,\r
1301        0.05986415f, -9.12760664e-003f, -0.18780160f, -0.11992817f,\r
1302        -0.06342237f, 0.01229534f, 0.07143231f, 0.10713009f, 0.11085765f,\r
1303        0.06569190f, -0.02956399f, -0.16288325f, -0.13993549f, -0.01292515f,\r
1304        0.03833013f, 0.09130384f, -0.05086257f, 0.05617329f, -0.03896667f,\r
1305        -0.06282311f, -0.11490010f, -0.14264110f, -0.04530499f, 0.01598189f,\r
1306        0.09167797f, 0.08663294f, 0.04885277f, -0.05741219f, -0.07565769f,\r
1307        -0.17136464f, -0.02619422f, -0.02477579f, 0.02679587f, 0.11621952f,\r
1308        0.08788391f, 0.15520640f, 0.04709549f, 0.04504483f, -0.10214074f,\r
1309        -0.12293372f, -0.04820546f, -0.05484834f, 0.05473754f, 0.07346445f,\r
1310        0.05577277f, -0.08209965f, 0.03462975f, -0.20962234f, -0.09324598f,\r
1311        3.79481679e-003f, 0.03617633f, 0.16742408f, 0.07058107f, 0.10204960f,\r
1312        -0.06795346f, 3.22807301e-003f, -0.12589309f, -0.17496960f,\r
1313        0.02078314f, -0.07694324f, 0.12184640f, 0.08997164f, 0.04793497f,\r
1314        -0.11383379f, -0.08046359f, -0.25716835f, -0.08080962f,\r
1315        6.80711539e-003f, -0.02930280f, -3.04938294e-003f, -0.11106286f,\r
1316        -0.04628860f, -0.07821649f, 7.70127494e-003f, -0.10247706f,\r
1317        1.21042714e-003f, 0.20573859f, -0.03241005f, 8.42972286e-003f,\r
1318        0.01946464f, -0.01197973f, -0.14579976f, 0.04233614f,\r
1319        -4.14096704e-003f, -0.06866436f, -0.02431862f, -0.13529138f,\r
1320        1.25891645e-003f, -0.11425111f, -0.04303651f, -0.01694815f,\r
1321        0.05720210f, -0.16040207f, 0.02772896f, 0.05498345f, -0.15010567f,\r
1322        0.01450866f, 0.02350303f, -0.04301004f, -0.04951802f, 0.21702233f,\r
1323        -0.03159155f, -0.01963303f, 0.18232647f, -0.03263875f,\r
1324        -2.88476888e-003f, 0.01587562f, -1.94303901e-003f, -0.07789494f,\r
1325        0.04674156f, -6.25576358e-003f, 0.08925962f, 0.21353747f, 0.01254677f,\r
1326        -0.06999976f, -0.05931328f, -0.01884327f, -0.04306272f, 0.11794136f,\r
1327        0.03842728f, -0.03907030f, 0.05636114f, -0.09766009f, -0.02104000f,\r
1328        8.72711372e-003f, -0.02736877f, -0.05112274f, 0.16996814f, 0.02955785f,\r
1329        0.02094014f, 0.08414304f, -0.03335762f, -0.03617457f, -0.05808248f,\r
1330        -0.08872101f, 0.02927705f, 0.27077839f, 0.06075108f, 0.07478261f,\r
1331        0.15282831f, -0.03908454f, -0.05101782f, -9.51998029e-003f,\r
1332        -0.03272416f, -0.08735625f, 0.07633440f, -0.07185312f, 0.13841286f,\r
1333        0.07812646f, -0.12901451f, -0.05488589f, -0.05644578f, -0.03290703f,\r
1334        -0.11184757f, 0.03751570f, -0.05978153f, -0.09155276f, 0.05657315f,\r
1335        -0.04328186f, -0.03047933f, -0.01413135f, -0.10181040f, -0.01384013f,\r
1336        0.20132534f, -0.01536873f, -0.07641169f, 0.05906778f, -0.07833145f,\r
1337        -0.01523801f, -0.07502609f, -0.09461885f, -0.15013233f, 0.16050665f,\r
1338        0.09021381f, 0.08473236f, 0.03386267f, -0.09147339f, -0.09170618f,\r
1339        -0.08498498f, -0.05119187f, -0.10431040f, 0.01041618f, -0.03064913f,\r
1340        0.09340212f, 0.06448522f, -0.03881054f, -0.04985436f, -0.14794017f,\r
1341        -0.05200112f, -0.02144495f, 0.04000821f, 0.12420804f, -0.01851651f,\r
1342        -0.04116732f, -0.11951703f, -0.04879033f, -0.08722515f, -0.08454733f,\r
1343        -0.10549165f, 0.11251976f, 0.10766345f, 0.19201984f, 0.06128913f,\r
1344        -0.02734615f, -0.08834923f, -0.16999826f, -0.03548348f,\r
1345        -5.36092324e-003f, 0.08297954f, 0.07226378f, 0.04194529f, 0.04668673f,\r
1346        8.73902347e-003f, 0.06980139f, 0.05652480f, 0.05879445f, 0.02477076f,\r
1347        0.02451423f, 0.12433673f, 0.05600227f, 0.06886370f, 0.03863076f,\r
1348        0.07459056f, 0.02264139f, 0.01495469f, 0.06344220f, 0.06945208f,\r
1349        0.02931899f, 0.11719371f, 0.04527427f, 0.03248192f, 2.08271481e-003f,\r
1350        0.02044626f, 0.11403449f, 0.04303892f, 0.06444661f, 0.04959024f,\r
1351        0.08174094f, 0.09240247f, 0.04894639f, 0.02252937f, -0.01652530f,\r
1352        0.07587013f, 0.06064249f, 0.13954395f, 0.02772832f, 0.07093039f,\r
1353        0.08501238f, 0.01701301f, 0.09055722f, 0.33421436f, 0.20163782f,\r
1354        0.09821030f, 0.07951369f, 0.08695120f, -0.12757730f, -0.13865978f,\r
1355        -0.06610068f, -0.10985506f, 0.03406816f, -0.01116336f, -0.07281768f,\r
1356        -0.13525715f, -0.12844718f, 0.08956250f, 0.09171610f, 0.10092317f,\r
1357        0.23385370f, 0.34489515f, 0.09901748f, 0.02002922f, 0.12335990f,\r
1358        0.07606190f, -0.14899330f, -0.15634622f, -0.06494618f, -0.01760547f,\r
1359        0.03404277f, -0.13208845f, -0.12101169f, -0.18294574f, -0.16560709f,\r
1360        0.02183887f, -0.02752613f, 0.01813638f, 0.02000757f, 0.01319924f,\r
1361        0.08030242f, 0.01220535f, 2.98233377e-003f, -0.01307070f, 0.05970297f,\r
1362        -0.05345284f, -0.03381982f, -9.87543724e-003f, -0.06869387f,\r
1363        0.03956730f, -0.03108176f, -0.05732809f, 0.02172386f, 0.04159765f,\r
1364        2.62783933e-003f, 0.04813229f, 0.09358983f, -8.18389002e-003f,\r
1365        0.01724574f, -0.02547474f, -0.04967288f, -0.02390376f, 0.06640504f,\r
1366        -0.06306566f, 0.01137518f, 0.05589378f, -0.08237787f, 0.02455001f,\r
1367        -0.03059422f, -0.08953978f, 0.06851497f, 0.07190268f, -0.07610799f,\r
1368        7.87237938e-003f, -7.85830803e-003f, 0.06006952f, -0.01126728f,\r
1369        -2.85743061e-003f, -0.04772895f, 0.01884944f, 0.15005857f,\r
1370        -0.06268821f, -0.01989072f, 0.01138399f, 0.08760451f, 0.03879007f,\r
1371        -9.66926850e-003f, -0.08012961f, 0.06414555f, -0.01362950f,\r
1372        -0.09135523f, 0.01755159f, 0.04459474f, 0.09650917f, 0.05219948f,\r
1373        -2.19440833e-003f, -0.07037939f, -0.01599054f, 0.13103317f,\r
1374        -0.02492603f, -0.01032540f, -0.02903307f, 0.04489160f, 0.05148086f,\r
1375        0.01858173f, -0.02919228f, 0.08299296f, -0.04590359f, -0.15745632f,\r
1376        -0.09068198f, -0.02972453f, 0.12985018f, 0.22320485f, 0.24261914f,\r
1377        0.03642650f, -0.05506422f, 2.67413049e-003f, -0.03834032f, 0.06449424f,\r
1378        0.03834866f, 0.03816991f, 0.25039271f, 0.34212017f, 0.32433882f,\r
1379        0.18824573f, -0.08599839f, -0.17599408f, -0.15317015f, -0.09913155f,\r
1380        -0.02856072f, -0.05304699f, -1.06437842e-003f, -0.06641813f,\r
1381        -0.07509298f, 0.01463361f, -0.07551918f, -0.04510373f,\r
1382        -8.44620075e-003f, 0.01772176f, 0.04068235f, 0.20295307f, 0.15719447f,\r
1383        0.05712103f, 0.26296997f, 0.14657754f, 0.01547317f, -0.05052776f,\r
1384        -0.03881342f, -0.01437883f, -0.04930177f, 0.11719568f, 0.24098417f,\r
1385        0.26468599f, 0.31698579f, 0.10103608f, -0.01096375f, -0.01367013f,\r
1386        0.17104232f, 0.20065314f, 2.67622480e-003f, -0.01190034f, 0.18301608f,\r
1387        0.09459770f, -0.06357619f, -0.06473801f, 0.01377906f, -0.10032775f,\r
1388        -0.06388740f, 3.80393048e-003f, 0.06206078f, 0.10349120f, 0.26804337f,\r
1389        8.17918684e-003f, -0.02314351f, 9.34422202e-003f, 0.09198381f,\r
1390        0.03681326f, -8.77339672e-003f, -0.09662418f, -0.02715708f,\r
1391        0.13503517f, 0.08962728f, -6.57071499e-003f, -0.03201199f, 0.28510824f,\r
1392        0.32095715f, 0.18512695f, -0.14230858f, -0.14048551f, -0.07181299f,\r
1393        -0.08575408f, -0.08661680f, -0.17416079f, 7.54326640e-004f,\r
1394        0.05601677f, 0.13585392f, -0.04960437f, -0.07708392f, 0.10676333f,\r
1395        -0.04407546f, -0.07209078f, 0.03663663f, 0.28949317f, 0.41127121f,\r
1396        0.27431169f, -0.06900328f, -0.21474190f, -0.15578632f, -0.19555484f,\r
1397        -0.15209621f, -0.11269179f, 0.07416003f, 0.18991330f, 0.26858172f,\r
1398        0.01952259f, 0.01017922f, 0.02159843f, -4.95165400e-003f, -0.04368168f,\r
1399        -0.12721671f, -0.06673957f, -0.11275250f, 0.04413409f, 0.05578312f,\r
1400        0.03896771f, 0.03566417f, -0.05871816f, -0.07388090f, -0.17965563f,\r
1401        -0.08570268f, -0.15273231f, -0.06022318f, -0.06999847f,\r
1402        -6.81510568e-003f, 0.06294262f, -6.54901436e-004f, -0.01128654f,\r
1403        -0.02289657f, 0.04849290f, 0.04140804f, 0.23681939f, 0.14545733f,\r
1404        0.01989965f, 0.12032662f, 3.87463090e-003f, -6.02597650e-003f,\r
1405        -0.05919775f, -0.03067224f, -0.07787777f, 0.10834727f, 0.02153730f,\r
1406        0.02765649f, 0.03975543f, -0.12182906f, -0.04900113f, -0.09940100f,\r
1407        -0.06453611f, -0.13757215f, -0.03721382f, 0.02827376f, -0.04351249f,\r
1408        0.01907038f, -0.10284120f, -0.05671160f, -0.10760647f, -0.09624009f,\r
1409        -0.09565596f, -0.01303654f, 0.03080539f, 0.01416511f, 0.05846142f,\r
1410        -5.42971538e-003f, 0.06221476f, -0.03320325f, -0.06791797f,\r
1411        -0.05791342f, 0.12851369f, 0.14990346f, 0.03634374f, 0.14262885f,\r
1412        0.04330391f, 0.05032569f, -0.05631914f, 0.01606137f, 0.04387223f,\r
1413        0.22344995f, 0.15722635f, -0.04693628f, 0.03006579f, -2.52882647e-003f,\r
1414        0.05717621f, -0.07529724f, -0.02848588f, -0.06868757f,\r
1415        -4.51729307e-003f, 0.06466042f, -0.05935378f, -0.04704857f,\r
1416        -0.07363959f, 0.04843248f, -0.13421375f, -0.09789340f, -0.10255270f,\r
1417        0.03509852f, 0.04751543f, -0.03822323f, 0.09740467f, 0.04762916f,\r
1418        0.03940146f, -0.08283259f, 0.09552965f, 0.05038739f, 0.21258622f,\r
1419        0.09646992f, 0.03241193f, 0.05167701f, 0.04614570f, 0.04330090f,\r
1420        -0.02671840f, -0.06259909f, -0.02301898f, 0.18829170f, 0.10522786f,\r
1421        0.04313190f, 0.01670948f, -0.08421925f, 0.05911417f, -0.10582602f,\r
1422        -0.04855484f, -0.08373898f, 0.07775915f, 0.03723533f, -0.12047344f,\r
1423        4.86345543e-003f, -0.10520902f, 0.06571782f, -0.07528137f,\r
1424        -0.03245651f, -0.09869066f, -0.02917477f, -0.18293270f, 0.14810945f,\r
1425        9.24033765e-003f, -0.04354914f, 0.02266885f, -0.11872729f,\r
1426        -0.04016589f, 0.02830229f, 0.22539048f, 0.20565644f, 0.16701797f,\r
1427        0.09019924f, 0.01300652f, 0.09760600f, -0.03675831f, -0.01935448f,\r
1428        -0.06894835f, 0.08077277f, 0.19047537f, 0.11312226f, 0.04106043f,\r
1429        -0.11187182f, 0.04312806f, -0.18548580f, -0.11287174f, -0.08794551f,\r
1430        0.02078281f, -0.15295486f, 0.11806386f, -0.01103218f, -0.15971117f,\r
1431        0.02153538f, -0.05232147f, -0.10835317f, -0.13910367f, 0.05920752f,\r
1432        -0.10122602f, 0.20174250f, 0.09105796f, -0.01881348f, 0.09559010f,\r
1433        -0.03725745f, -0.09442931f, -0.09763174f, 0.05854454f, 0.08287182f,\r
1434        0.12919849f, 0.08594352f, -2.49806582e-003f, 0.02398440f,\r
1435        5.67950122e-003f, -0.06296340f, -0.12993270f, 0.03855852f, 0.05186560f,\r
1436        0.10839908f, -0.03380463f, -0.12654832f, -0.05399339f, -0.07456800f,\r
1437        -0.04736232f, -0.10164231f, 0.07496139f, 0.08125214f, 0.07656177f,\r
1438        -0.04999603f, -0.12823077f, -0.07692395f, -0.11317524f, -0.09118655f,\r
1439        -0.05695669f, 0.10477209f, 0.07468581f, 0.01630048f, -8.00961629e-003f,\r
1440        -0.06582128f, -0.04019095f, -0.04682907f, -0.01907842f, -0.10997720f,\r
1441        0.04911406f, 0.02931030f, 0.04197735f, -0.05773980f, -0.09670641f,\r
1442        -0.03594951f, -0.03402121f, -0.07149299f, -0.10566200f, 0.10601286f,\r
1443        0.06340689f, -0.01518632f, -5.96402306e-003f, -0.07628012f,\r
1444        -3.52779147e-003f, -0.02683854f, -0.10265494f, -0.02680815f,\r
1445        0.16338381f, 0.03103515f, 0.02296976f, 0.01624348f, -0.10831620f,\r
1446        -0.02314233f, -0.04789969f, -0.05530700f, -0.06461314f, 0.10494506f,\r
1447        0.04642856f, -0.07592955f, -0.06197905f, -0.09042154f, -0.01445521f,\r
1448        -0.04297818f, -0.11262015f, -0.11430512f, 0.03174541f, -0.03677487f,\r
1449        -0.02963996f, -0.06610169f, -0.13292049f, -0.07059067f, -0.08444111f,\r
1450        -0.02640536f, -0.07136250f, 0.04559967f, 0.01459980f, 0.17989251f,\r
1451        0.04435328f, -0.12464730f, -0.02871115f, -0.10752209f, -0.03393742f,\r
1452        -0.03791408f, 0.02548251f, 0.01956050f, 0.19245651f, 0.13963254f,\r
1453        -0.05904696f, -0.07424626f, -0.10411884f, 1.54176133e-003f,\r
1454        0.01797429f, 0.13025844f, 0.04547642f, -0.05710349f, -0.10697161f,\r
1455        -0.13489437f, -0.06515755f, -0.06406886f, -4.08572936e-003f,\r
1456        -0.01336483f, 0.04368737f, -0.11259720f, -0.05701635f, -0.06469971f,\r
1457        -0.08346602f, -0.04166770f, -0.05795543f, -0.08247511f, -0.05742628f,\r
1458        0.08452254f, -0.03350224f, 0.13980860f, 0.13252275f, 0.07589617f,\r
1459        0.07539988f, 0.12155797f, 0.19087289f, 0.15050751f, 0.21250245f,\r
1460        0.14206800f, 0.01298489f, 0.07450245f, 0.06559097f, 0.01700557f,\r
1461        0.04512971f, 0.16950700f, 0.10261577f, 0.16389982f, 0.05505059f,\r
1462        -0.03453077f, 0.08622462f, 0.07935954f, 0.03976260f, 0.02036091f,\r
1463        3.95744899e-003f, 0.03267065f, 0.15235919f, 0.01297494f, -0.08109194f,\r
1464        0.01407558f, 4.40693414e-003f, -0.15157418f, -0.11390478f,\r
1465        -0.07487597f, -7.81322457e-003f, -0.02749545f, -0.10181408f,\r
1466        0.13755716f, 0.14007211f, 0.13482562f, 0.27517235f, 0.34251109f,\r
1467        0.07639657f, 0.07268607f, 0.19823882f, 0.16135791f, -0.04186463f,\r
1468        -0.12784107f, -0.09846287f, 0.03169041f, 0.10974082f, -0.15051922f,\r
1469        -0.08916726f, -0.07138767f, -0.04153349f, 6.25418453e-003f,\r
1470        0.01266654f, 0.10533249f, 0.12749144f, 0.15148053f, 0.01498513f,\r
1471        0.06305949f, -0.01247123f, -0.08778401f, -0.08551880f, -0.11955146f,\r
1472        -0.08493572f, -0.02901620f, -0.02394859f, -0.13427313f, -0.11053200f,\r
1473        -0.14413260f, -0.15203285f, 0.03972760f, -3.72127310e-004f,\r
1474        -0.04200919f, 0.06105104f, 0.01904975f, -0.01106191f,\r
1475        -7.27445772e-003f, -0.01520341f, 1.10228511e-003f, -0.04949187f,\r
1476        -0.08013099f, 5.72071038e-003f, 0.08415454f, -0.06523152f, 0.03664081f,\r
1477        -0.02673042f, -0.12066154f, -0.03702074f, 0.06006580f, 0.01628682f,\r
1478        -6.17772620e-003f, 0.08192339f, -3.41629819e-003f, 0.02870512f,\r
1479        0.05807141f, 0.04959986f, 0.04618251f, -0.04901629f, -0.10579574f,\r
1480        0.02274442f, 0.12070961f, 2.23597488e-003f, 0.09831765f, -0.03019848f,\r
1481        -0.11181970f, -0.04961075f, 0.02498928f, -0.03714991f, -0.01619653f,\r
1482        0.02643486f, -7.62964319e-003f, -0.02882290f, -0.06242594f,\r
1483        -0.08439861f, 0.07220893f, 0.07263952f, 0.01561574f, 0.03091968f,\r
1484        0.01708712f, -0.03797151f, -3.18561122e-003f, 0.01624021f,\r
1485        -0.02828573f, 0.11284444f, -1.32280716e-003f, -0.07784860f,\r
1486        -0.07209100f, 0.03372242f, 0.12154529f, 0.02278104f, -0.05275500f,\r
1487        -0.01918484f, 0.12989293f, 0.05424401f, 0.02333086f, 0.04029022f,\r
1488        0.12392918f, 0.09495489f, 0.09190340f, 0.07935889f, 8.76816828e-003f,\r
1489        0.17148446f, -8.51302687e-003f, -0.08011249f, -0.06796283f,\r
1490        0.04884845f, 0.01112272f, -0.07835306f, -1.14811445e-003f,\r
1491        -0.03440760f, 0.02845243f, 0.07695542f, -0.07069533f, -0.01151784f,\r
1492        -8.53884313e-003f, -0.01662786f, -0.04163864f, 0.05400505f,\r
1493        0.02859163f, 0.02921852f, 0.05003135f, -6.85718050e-003f, -0.01632611f,\r
1494        0.07780217f, 0.04042810f, -0.01216440f, 3.60914599e-003f, -0.06322435f,\r
1495        0.09516726f, 0.12877031f, -9.69162490e-003f, 0.01031179f, 0.05180895f,\r
1496        -9.34659224e-003f, -0.01644533f, -0.04849347f, -0.04343236f,\r
1497        0.10514783f, 0.08046635f, -0.04615205f, -0.03975486f, -0.01485525f,\r
1498        0.13096830f, -0.01517950f, -0.06571898f, -0.04016372f, 0.01849786f,\r
1499        0.02439670f, 0.08067258f, 1.74824719e-003f, 0.07053747f, 0.08819518f,\r
1500        -5.08352555e-003f, -0.06550863f, -0.08266170f, -0.07780605f,\r
1501        0.01453450f, -0.08756890f, 0.01096501f, -8.71319138e-003f, 0.10110464f,\r
1502        0.02420769f, -0.06708383f, 0.02007811f, 5.93133038e-003f, 0.05398923f,\r
1503        0.07538138f, 0.02049227f, 0.02242589f, 0.04011070f, -1.44875818e-003f,\r
1504        -4.19115182e-003f, 0.06367654f, 0.02506934f, 0.02434536f, 0.05879405f,\r
1505        -8.22952855e-003f, -0.01242441f, 0.04224926f, -0.01754923f,\r
1506        0.05958161f, 0.03818886f, -0.01830363f, -0.04308917f, -0.04422197f,\r
1507        -0.02432721f, 0.02264866f, 2.03751423e-003f, 0.01197031f, 0.04439203f,\r
1508        0.12169247f, 0.03602713f, -0.02599251f, -1.98226492e-003f, 0.02046336f,\r
1509        -0.02639058f, -1.91242550e-003f, -0.09334669f, -0.03595153f,\r
1510        -9.88179818e-003f, -0.06848445f, -0.04666303f, -0.09955736f,\r
1511        -0.04206430f, 0.02609075f, 9.09005292e-003f, -0.07138551f,\r
1512        -4.22313227e-004f, 0.01766645f, 0.02756404f, 0.01308276f, 0.04052891f,\r
1513        0.02387515f, 0.05337298f, 0.02500631f, -0.04970853f, -0.12467445f,\r
1514        0.17604403f, 0.12256411f, -0.07512254f, 8.70451052e-003f, -0.05697548f,\r
1515        -0.03626474f, -8.76623299e-003f, -0.01210897f, -0.09451522f,\r
1516        0.07490732f, -0.02008001f, -0.02681278f, -0.06463405f, -0.01517507f,\r
1517        7.33757764e-003f, 6.07147906e-003f, -0.09316964f, -0.04575328f,\r
1518        0.13261597f, 0.15424870f, -0.01655918f, -0.02772390f, -0.05243644f,\r
1519        -0.02356456f, -0.02351753f, -0.10211615f, -0.12873036f, 0.14549787f,\r
1520        0.12519856f, 4.38762689e-003f, 0.02795992f, 0.05170322f, 0.09223596f,\r
1521        0.05890015f, 0.02376701f, -0.02777346f, 0.09506908f, 0.02328936f,\r
1522        -0.02319928f, -0.03218696f, -0.01527841f, -0.01016694f, -0.02674719f,\r
1523        0.05137179f, 0.01980666f, 0.06544447f, -0.01746171f, 0.01026380f,\r
1524        0.01561806f, 7.97004555e-004f, 0.07601810f, 0.01907250f, -0.03083035f,\r
1525        -0.05987392f, 0.09242783f, 0.14555025f, 0.01035827f, 0.03092401f,\r
1526        -0.09562709f, -0.03802354f, 0.02531144f, 0.03079449f, -0.07100715f,\r
1527        0.03330721f, -2.69116857e-003f, 0.03167490f, 0.05744999f, 0.03259895f,\r
1528        1.91266940e-003f, 0.03194578f, 0.07389776f, 0.02198060f, 0.07633314f,\r
1529        0.03293105f, -0.09103648f, 0.04718142f, 0.06102672f, -0.01003063f,\r
1530        5.85481385e-003f, -0.01522574f, 0.02323526f, 0.10584345f,\r
1531        4.35879454e-003f, 0.06107873f, 0.05868603f, -0.03115531f, 0.01214679f,\r
1532        0.08567052f, 3.93926632e-003f, -0.02521488f, -1.88425183e-003f,\r
1533        0.02038053f, -6.26854831e-004f, 0.04897438f, -0.04280585f,\r
1534        -0.04819689f, -0.04812867f, -0.01451186f, 0.05101469f,\r
1535        -9.01125465e-003f, -0.03333859f, 0.03917955f, 0.04196448f, 0.04292135f,\r
1536        0.02809529f, 0.02999715f, 0.04081348f, 9.10039060e-003f, 0.09703232f,\r
1537        0.10379741f, 0.02348725f, -4.72756615e-003f, 0.01027325f, 0.10402658f,\r
1538        0.12071823f, 0.09817299f, -0.02612033f, 0.03638414f, 0.05896405f,\r
1539        0.04865025f, 0.04793910f, -0.03882321f, -0.02962117f, -0.01222268f,\r
1540        0.04071597f, 0.01922777f, -0.02287866f, 0.03328381f, 0.01859092f,\r
1541        0.09024994f, 0.03804455f, -0.01424510f, 0.01953739f, 0.02509617f,\r
1542        -0.03390914f, -0.05663941f, -0.01641979f, 0.05848591f, 0.04639670f,\r
1543        0.02092116f, 0.12911791f, 0.19918139f, 0.07739855f, -7.25806039e-003f,\r
1544        0.04074838f, 0.03183993f, 1.39251316e-003f, -0.01428625f, 0.01865480f,\r
1545        0.08529541f, 0.13547510f, 0.11189661f, 0.03998901f, 0.09575938f,\r
1546        -0.02631102f, -0.03458253f, -0.04749985f, -0.06070716f,\r
1547        4.71884012e-003f, 0.06445789f, -0.02450038f, -0.05483776f,\r
1548        -0.04657237f, -0.02030717f, -0.03480766f, -0.09397731f, -0.06399718f,\r
1549        -0.01804585f, 5.62348310e-003f, -6.64811488e-003f, -0.06517869f,\r
1550        6.96210237e-003f, -0.01860148f, -0.04245830f, -0.05850367f,\r
1551        -3.24417115e-003f, 0.07700698f, 0.11290991f, 0.09923030f, -0.02970599f,\r
1552        0.05592411f, 0.04813979f, -0.09811195f, -0.09357996f, -0.03276114f,\r
1553        0.05218338f, 0.04141375f, 3.92977800e-003f, -0.05047480f, 0.15960084f,\r
1554        0.04612800f, -0.03114098f, -0.04650044f, -0.03249795f, -0.02425641f,\r
1555        -0.04311355f, 0.04307659f, -0.09401883f, -0.04742785f, -0.01254499f,\r
1556        -0.06598741f, 3.41369561e-003f, -0.05620445f, -7.28127593e-003f,\r
1557        -0.05998361f, -0.03274450f, -0.07376868f, 3.19015374e-003f,\r
1558        -0.07733069f, 0.05815864f, -0.02471071f, 0.03850617f, 0.13838784f,\r
1559        0.15399861f, 0.01731321f, -0.01477586f, 0.10393341f, 0.05159833f,\r
1560        -0.01945555f, -0.03427503f, -0.04867341f, 0.09237480f, 0.10732719f,\r
1561        0.06071450f, -0.01355071f, 0.01844356f, -0.03480803f, -0.03796671f,\r
1562        2.15628621e-004f, -0.05440186f, 0.01889855f, -0.01443413f,\r
1563        -0.02607902f, -0.02938001f, 0.02720689f, -0.06228397f, -0.02970936f,\r
1564        -0.03426210f, -0.10280876f, -0.06739304f, -0.05227850f, 0.03360292f,\r
1565        -0.11278441f, -0.06966180f, -0.13937433f, 9.10932291e-003f,\r
1566        2.52020749e-004f, -4.07359656e-003f, 0.12310639f, 0.09343060f,\r
1567        0.07302511f, 0.03222093f, 0.07532879f, 0.03792387f, -0.04985180f,\r
1568        0.01804602f, 0.02694195f, 0.13481498f, 0.04601225f, 0.04106982f,\r
1569        0.08511057f, 0.12314661f, 0.01320830f, 0.05044121f, -5.52943908e-003f,\r
1570        -0.08992624f, -0.02249301f, -0.08181777f, 0.06165213f, -0.03256603f,\r
1571        -0.01068920f, -0.01323473f, -0.11970232f, -0.04616347f, -0.12088681f,\r
1572        -0.06762606f, -0.08676834f, -0.06434575f, 0.01772529f, 0.03469615f,\r
1573        -0.10926618f, 0.03013873f, 0.14030397f, 0.16130108f, 0.17985588f,\r
1574        0.11281928f, 0.10530639f, 0.08905948f, 0.07733764f, 0.06695238f,\r
1575        0.02142088f, 0.06438877f, 0.09794453f, 0.05745072f, 0.02788557f,\r
1576        0.02632830f, 0.07985807f, 4.24902979e-003f, 8.47890321e-003f,\r
1577        -0.02679466f, -5.28812688e-003f, -0.02162580f, -0.07490715f,\r
1578        -0.08251337f, -0.02056576f, -0.01026194f, -1.15492963e-003f,\r
1579        -5.75720915e-004f, -0.07210591f, -0.07320981f, -0.04883312f,\r
1580        -0.10897151f, -0.07477258f, -0.08867134f, -0.09222437f, -0.10924666f,\r
1581        -0.10430276f, 0.07953499f, 0.02767959f, 0.11393359f, 0.18779543f,\r
1582        0.03313421f, 0.02143700f, 0.05852016f, -2.12067598e-003f,\r
1583        -3.76984011e-003f, 0.02774167f, -0.03124610f, 0.01465141f, 0.01616004f,\r
1584        -0.01391913f, -0.04404102f, -0.05444227f, -0.14684731f, -0.15016587f,\r
1585        0.04509468f, 1.29563001e-003f, 0.01398350f, 0.05610404f, -0.04868806f,\r
1586        -0.04776716f, -8.16873740e-003f, -2.30126386e-003f, -0.02286313f,\r
1587        0.11983398f, -0.04703261f, -0.08814441f, -0.07585249f, -0.10799607f,\r
1588        -0.03232087f, 0.01509786f, -0.04843464f, -0.03967846f, 0.09589416f,\r
1589        0.01352560f, -0.01458119f, 0.01050829f, -0.03038946f, 0.01608388f,\r
1590        1.11975556e-003f, -0.01250656f, 2.86211423e-003f, 0.04333691f,\r
1591        -0.14603497f, -0.01946543f, -0.02327525f, -0.01973944f, 0.07944400f,\r
1592        -0.02224544f, -0.06701808f, 0.03476532f, 0.11505594f, -0.02712801f,\r
1593        -0.01665113f, 0.06315716f, -0.08205860f, 0.07431999f, 0.04915778f,\r
1594        -0.04468752f, -0.01490402f, 0.07400476f, -0.11650901f, 0.05102430f,\r
1595        0.04559118f, -0.05916039f, 0.08840760f, -0.01587902f, -0.14890194f,\r
1596        0.07857784f, 0.04710254f, -0.05381983f, -0.07331945f, -0.03604643f,\r
1597        0.15611970f, 0.07649943f, -0.05959348f, -0.02776607f, 0.11098688f,\r
1598        0.03758875f, -0.04446875f, 0.04933187f, 0.01345535f, 0.06921103f,\r
1599        0.07364785f, 0.05518956f, 0.02899585f, 0.09375840f, 0.10518434f,\r
1600        -0.04420241f, 0.01915282f, -3.56386811e-003f, 0.14586878f, 0.10286101f,\r
1601        -0.04360626f, -0.12723237f, 0.09076386f, 0.11119842f, -0.06035013f,\r
1602        0.09674817f, 0.08938243f, 0.07065924f, 0.02603180f, 5.84815582e-003f,\r
1603        -0.05922065f, 0.12360309f, 3.59695964e-003f, 2.99844006e-003f,\r
1604        0.03697936f, 0.02043072f, 0.04168725f, 0.01025975f, -0.01359980f,\r
1605        -0.01600920f, 0.02581056f, 0.02329250f, 2.98100687e-003f, 0.01629762f,\r
1606        0.06652115f, 0.05855627f, 0.01237463f, -0.01297135f, 0.01761587f,\r
1607        0.05090865f, 0.06549342f, -0.04425945f, 2.43203156e-003f,\r
1608        3.07327788e-003f, 0.06678630f, -0.04303836f, 0.01082393f, -0.06476044f,\r
1609        0.04077786f, 0.12441979f, 0.08237778f, 0.07424165f, 0.04065890f,\r
1610        0.06905543f, 0.09556347f, 0.12724875f, -0.02132082f, 0.08514154f,\r
1611        -0.04175328f, -0.02666954f, 0.01897836f, 0.03317382f, 9.45465732e-003f,\r
1612        -0.01238974f, -0.04242500f, -0.01419479f, -0.03545213f, -0.02440874f,\r
1613        0.08684119f, 0.04212951f, 0.02462858f, -0.01104825f, -5.01706870e-003f,\r
1614        0.02968982f, 0.02597476f, -0.01568939f, 0.04514892f, 0.06974549f,\r
1615        0.08670278f, 0.06828108f, 0.10238872f, 0.05405957f, 0.06548470f,\r
1616        -0.03763957f, 0.01366090f, 0.07069602f, 0.05363748f, 0.04798120f,\r
1617        0.11706422f, 0.05466456f, -0.01869259f, 0.06344382f, 0.03106543f,\r
1618        0.08432506f, -0.02061096f, 0.03821088f, -6.92190882e-003f,\r
1619        6.40467042e-003f, -0.01271779f, 6.89014705e-005f, 0.04541415f,\r
1620        -0.01899539f, -0.05020239f, 0.03000903f, 0.01090422f, 4.52452758e-003f,\r
1621        0.02573632f, -0.02388454f, -0.04200457f, 1.72783900e-003f,\r
1622        -0.05978370f, -0.02720562f, 0.06573715f, 0.01154317f, 0.01265615f,\r
1623        0.07375994f, -9.19828378e-003f, -0.04914120f, 0.02124831f, 0.06455322f,\r
1624        0.04372910f, -0.03310043f, 0.03605788f, -6.78055827e-003f,\r
1625        9.36202332e-003f, 0.01747596f, -0.06406314f, -0.06812935f, 0.08080816f,\r
1626        -0.02778088f, 0.02735260f, 0.06393493f, 0.06652229f, 0.05676993f,\r
1627        0.08640018f, -7.59188086e-003f, -0.02012847f, -0.04741159f,\r
1628        -0.01657069f, -0.01624399f, 0.05547778f, -2.33309763e-003f,\r
1629        0.01120033f, 0.06141156f, -0.06285004f, -0.08732341f, -0.09313398f,\r
1630        -0.04267832f, 5.57443965e-003f, 0.04809862f, 0.01773641f,\r
1631        5.37361018e-003f, 0.14842421f, -0.06298012f, -0.02935147f, 0.11443478f,\r
1632        -0.05034208f, 5.65494271e-003f, 0.02076526f, -0.04577984f,\r
1633        -0.04735741f, 0.02961071f, -0.09307127f, -0.04417921f, -0.04990027f,\r
1634        -0.03940028f, 0.01306016f, 0.06267900f, 0.03758737f, 0.08460117f,\r
1635        0.13858789f, 0.04862388f, -0.06319809f, -0.05655516f, 0.01885816f,\r
1636        -0.03285607f, 0.03371567f, -0.07040928f, -0.04514049f, 0.01392166f,\r
1637        0.08184422f, -0.07230316f, 0.02386871f, 0.02184591f, 0.02605764f,\r
1638        -0.01033954f, 9.29878280e-003f, 7.67351175e-003f, 0.15189242f,\r
1639        0.02069071f, -0.09738296f, -0.08894105f, -0.07768748f, 0.02332268f,\r
1640        -0.01778995f, -0.03258888f, -0.08180822f, -0.08492987f, 0.02290156f,\r
1641        -0.11368170f, -0.03554465f, -0.04533844f, -0.02861580f, 0.06782424f,\r
1642        0.01113123f, 0.02453644f, 0.12721945f, 0.08084814f, -0.03607795f,\r
1643        0.01109122f, 0.04803548f, -0.03489929f, 0.03399536f, -0.05682014f,\r
1644        8.59533902e-003f, -4.27904585e-003f, 0.03230887f, -0.01300198f,\r
1645        -0.01038137f, -0.07930113f, 8.33097473e-003f, 0.02296994f,\r
1646        -0.01306500f, -0.01881626f, 0.04413369f, 0.05729880f, -0.03761553f,\r
1647        0.01942326f, 1.64540811e-003f, -0.03811319f, 0.04190650f, -0.14978096f,\r
1648        -0.04514487f, 0.01209545f, -5.46460645e-003f, -0.01647195f,\r
1649        7.63064111e-003f, -0.07494587f, 0.08415288f, 0.10020141f, -0.01228561f,\r
1650        0.06553826f, 0.04554005f, 0.07890417f, 0.03041138f, 0.01752007f,\r
1651        0.09208256f, -3.74419295e-004f, 0.10549527f, 0.04686913f, 0.01894833f,\r
1652        -0.02651412f, -4.34682379e-003f, 5.44942822e-003f, 0.01444484f,\r
1653        0.05882156f, -0.03336544f, 0.04603891f, -0.10432546f, 0.01923928f,\r
1654        0.01842845f, -0.01712168f, -0.02222766f, 0.04693324f, -0.06202956f,\r
1655        -0.01422159f, 0.08732220f, -0.07706107f, 0.02661049f, -0.04300238f,\r
1656        -0.03092422f, -0.03552184f, -0.01886088f, -0.04979934f, 0.03906401f,\r
1657        0.04608644f, 0.04966111f, 0.04275464f, -0.04621769f, -0.02653212f,\r
1658        8.57011229e-003f, 0.03839684f, 0.05818764f, 0.03880796f,\r
1659        -2.76100676e-004f, 0.03076511f, -0.03266929f, -0.05374557f,\r
1660        0.04986527f, -9.45429131e-003f, 0.03582499f, -2.64564669e-003f,\r
1661        -1.07461517e-003f, 0.02962313f, -0.01483363f, 0.03060869f, 0.02448327f,\r
1662        0.01845641f, 0.03282966f, -0.03534438f, -0.01084059f, -0.01119136f,\r
1663        -1.85360224e-003f, -5.94652840e-004f, -0.04451817f, 2.98327743e-003f,\r
1664        0.06272484f, -0.02152076f, -3.05971340e-003f, -0.05070828f,\r
1665        0.01531762f, 0.01282815f, 0.05167150f, 9.46266949e-003f,\r
1666        -3.34558333e-003f, 0.11442288f, -0.03906701f, -2.67325155e-003f,\r
1667        0.03069184f, -0.01134165f, 0.02949462f, 0.02879886f, 0.03855566f,\r
1668        -0.03450781f, 0.09142872f, -0.02156654f, 0.06075062f, -0.06220816f,\r
1669        0.01944680f, 6.68372354e-003f, -0.06656796f, 8.70784000e-003f,\r
1670        0.03456013f, 0.02434320f, -0.13236357f, -0.04177035f, -0.02069627f,\r
1671        0.01068112f, 0.01505432f, -0.07517391f, -3.83571628e-003f,\r
1672        -0.06298508f, -0.02881260f, -0.13101046f, -0.07221562f,\r
1673        -5.79945277e-003f, -8.57300125e-003f, 0.03782469f, 0.02762164f,\r
1674        0.04942456f, -0.02936396f, 0.09597211f, 0.01921411f, 0.06101191f,\r
1675        -0.04787507f, -0.01379578f, -7.40224449e-003f, -0.02220136f,\r
1676        -0.01313756f, 7.77558051e-003f, 0.12296968f, 0.02939998f, 0.03594062f,\r
1677        -0.07788624f, -0.01133144f, 3.99316690e-004f, -0.06090347f,\r
1678        -0.01122066f, -4.68682544e-003f, 0.07633100f, -0.06748922f,\r
1679        -0.05640298f, -0.05265681f, -0.01139122f, -0.01624347f, -0.04715714f,\r
1680        -0.01099092f, 0.01048561f, 3.28499987e-003f, -0.05810167f,\r
1681        -0.07699911f, -0.03330683f, 0.04185145f, 0.03478536f, 0.02275165f,\r
1682        0.02304766f, 6.66040834e-003f, 0.10968148f, -5.93013782e-003f,\r
1683        -0.04858336f, -0.04203213f, -0.09316786f, -6.13074889e-003f,\r
1684        -0.02544625f, 0.01366201f, 9.18555818e-003f, -0.01846578f,\r
1685        -0.05622401f, -0.03989377f, -0.07810296f, 6.91275718e-003f,\r
1686        0.05957597f, -0.03901334f, 0.01572002f, -0.01193903f,\r
1687        -6.89400872e-003f, -0.03093356f, -0.04136098f, -0.01562869f,\r
1688        -0.04604580f, 0.02865234f, -0.08678447f, -0.03232484f, -0.05364593f,\r
1689        -0.01445016f, -0.07003860f, -0.08669746f, -0.04520775f, 0.04274122f,\r
1690        0.03117515f, 0.08175703f, 0.01081109f, 0.06379741f, 0.06199206f,\r
1691        0.02865988f, 0.02360346f, 0.06725410f, -0.03248780f, -9.37702879e-003f,\r
1692        0.08265898f, -0.02245839f, 0.05125763f, -0.01862395f, 0.01973453f,\r
1693        -0.01994494f, -0.10770868f, 0.03180375f, 3.23935156e-003f,\r
1694        -0.02142080f, -0.04256190f, 0.04760900f, 0.04282863f, 0.05635953f,\r
1695        -0.01870849f, 0.05540622f, -0.03042666f, 0.01455277f, -0.06630179f,\r
1696        -0.05843807f, -0.03739681f, -0.09739155f, -0.03220233f, -0.05620182f,\r
1697        -0.10381401f, 0.07400211f, 4.20676917e-003f, 0.03258535f,\r
1698        2.14308966e-003f, 0.05121966f, -0.01274337f, 0.02384761f, 0.06335578f,\r
1699        -0.07905591f, 0.08375625f, -0.07898903f, -0.06508528f, -0.02498444f,\r
1700        0.06535810f, 0.03970535f, 0.04895468f, -0.01169566f, -0.03980601f,\r
1701        0.05682293f, 0.05925463f, -0.01165808f, -0.07936699f, -0.04208954f,\r
1702        0.01333987f, 0.09051196f, 0.10098671f, -0.03974256f, 0.01238771f,\r
1703        -0.07501741f, -0.03655440f, -0.04301528f, 0.09216860f,\r
1704        4.63579083e-004f, 0.02851115f, 0.02142735f, 1.28244064e-004f,\r
1705        0.02879687f, -0.08554889f, -0.04838862f, 0.08135369f, -0.05756533f,\r
1706        0.01413900f, 0.03451880f, -0.06619488f, -0.03053130f, 0.02961676f,\r
1707        -0.07384635f, 0.01135692f, 0.05283910f, -0.07778034f, -0.02107482f,\r
1708        -0.05511716f, -0.13473752f, 0.03030157f, 0.06722020f, -0.06218817f,\r
1709        -0.05826827f, 0.06254654f, 0.02895772f, -0.01664000f, -0.03620280f,\r
1710        -0.01612278f, -1.46097376e-003f, 0.14013411f, -8.96181818e-003f,\r
1711        -0.03250246f, 3.38630192e-003f, 2.64779478e-003f, 0.03359732f,\r
1712        -0.02411991f, -0.04229729f, 0.10666174f, -6.66579151f };\r
1713     return Vector<float>((float*)detector, sizeof(detector)/sizeof(detector[0]), true);\r
1714 }\r
1715 \r
1716 }\r