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